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

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

3 голосов
/ 23 января 2010

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

example.com/calendar_expanded?date=1270094400

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 23 января 2010

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

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

например. Symfony поддерживает дизайн RESTful из коробки.

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

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

3 голосов
/ 23 января 2010

Вам нужно проверить $_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.

2 голосов
/ 23 января 2010

Это то, что вы ищете?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...