URL-адреса в стиле REST и PHP


Мне очень трудно разобраться в использовании URL-адресов в стиле REST. Могу я получить небольшую помощь в этом? Прямо сейчас у меня есть строка запроса примерно так:

example.com/calendar_expanded?date=1270094400

У меня есть переписанный мод, который скрывает расширение .php. Как мне

  1. Сделай так, чтобы это calendar_expanded/date/1270094400 произошло.
  2. $_GET значения из URL-адреса после факта?

Мне нравится концепция, лежащая в ее основе, но работа по 16 часов в день, чтобы уложиться в срок в течение целого месяца, сказывается на моем мозг.

Спасибо за помощь.

Author: leepowers, 2010-01-23

3 answers

Если вы хотите создать довольно много URL-адресов REST, вам следует рассмотреть возможность использования фреймворка PHP, который использует шаблон проектирования Фронт-контроллера.

Таким образом, каждый запрос обрабатывается платформой, и вы можете гибко создавать свои URL-адреса так, как они должны выглядеть.

Например, Symfony поддерживает спокойный дизайн из коробки.

Кстати, URL-адреса RESTful имеют смысл только в том случае, если параметры каким-то образом фиксированы и указывают ресурс, например название поста в блоге. Если вы хотите передать параметр только для того, чтобы, например, управлять сортировкой таблицы (т. Е. Представлением чего-либо), то это должно быть "обычным" параметром GET в строке запроса.

В вашем случае, похоже, вы хотите контролировать, какой день должен отображаться в календаре. Я лично просто использовал бы здесь обычную строку запроса GET.

 3
Author: Felix Kling, 2010-01-22 23:13:01

Вам нужно проверить $_SERVER[ 'REQUEST_URI' ] или $_SERVER[ 'PATH_INFO' ], не $_GET.

$_SERVER[ 'REQUEST_URI' ] будет держать это /calendar_expanded/date/1270094400?quertStringParams=1&etc...
$_SERVER[ 'PATH_INFO' ] будет держать это /calendar_expanded/date/1270094400

Другими словами, вам придется разбить эти значения на отдельные сегменты, используя explode() и подобные. Я предлагаю вам использовать $_SERVER[ 'PATH_INFO' ] в качестве темы, так как реальные переменные строки запроса уже будут доступны в $_GET.

 3
Author: Decent Dabbler, 2010-01-22 22:58:43

Это то, что ты ищешь?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ calendar_expanded.php?url=$1 [QSA,L]
</IfModule>

Это то, что я помню, как делал CakePHP, когда он впервые вышел... не знаю, работает ли он до сих пор...

 2
Author: Richard JP Le Guen, 2010-01-23 01:32:55