PHP динамическая запись URL для размещения динамического меню и путей - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь выяснить, как лучше всего переписать URL-адреса, чтобы приспособить не только структуру каталогов, но и дополнительные действия для меню для сайта, который я создаю на PHP.

У меня есть одна страница, которая динамически загружает контент в зависимости от того, какая "страница" загружается. Включения извлекаются в зависимости от того, что страница. Прямо сейчас это связано с каталогами в моей папке include. Таким образом, папка / страница будет включать в себя / folder / page.php.

Если у меня есть структура типа «root / page / action / param», которая работает нормально, пока я говорю «все, что находится в этом месте в URL, это». Но я столкнулся с проблемой, когда начал добавлять папки, содержащие страницы разных уровней. Если я разрываю страницу в «папку / подпапку / страницу», то использую размещение, чтобы определить, что выходит из окна. Я думал об использовании чего-то вроде дефиса в качестве разделителя для перехода "root / folder-subfolder1-subfolder2-page / action / param", чтобы я мог легко идентифицировать страницу, но мне не очень понравился этот вариант.

Мне также не очень нравится связывать структуру каталогов include с моими URL-адресами, но я думаю, что единственный способ избежать этого - это использование объекта в памяти для обработки того, что именно и куда идет. Но я хочу избежать этого, поскольку хочу, чтобы меню было динамичным, основанным на XML-файле, который анализируется и URL генерируются соответствующим образом. Я не хочу, чтобы накладные расходы разбирались с xml и не только генерировали URL-адреса, но и динамически генерировали объект в памяти, имеющий, казалось бы, произвольные правила.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 11 августа 2010

PHPonTrax использует реализацию, которая, я думаю, позволит использовать этот тип маршрутизации, который вам нужен, и является открытым исходным кодом, чтобы вы могли взглянуть на код для вдохновения.(Примечание: я не делаю никакого суждения относительно структуры, я только что видел код и думаю, что он может работать для вас).

По сути, вы храните свои маршруты в массиве и также предоставляете некоторые метки-заполнители, чтобы вы могли иметь несколько возможных контроллеров / действий / идентификаторов после заданного пути.

Так что, если $ rout [] - это наш массив для хранения всего, мы можем добавить:

$routes[0]['path'] = "foo/bar/:controller/:action";
$routes[0]['params'] = null;
$routes[1]['path'] = "baz/:action";
$routes[1]['params'] = array("controller"=>"blah");
$routes[2]['path'] = "catalog/:id";
$routes[2]['params'] = array("controller"=>"products", "action"=>"view");
$routes[3]['path'] = ":controller/:action/:id";
$routes[3]['params'] = null;

": controller", ": action" и ": id" являются уникальными токенамикоторые указывают, что вы разрешаете токену представлять в пути.Таким образом, «/ baz / edit», «/ baz / delete», «/ baz / create», «/ baz / funkify» и т. Д. Являются действительными, если контроллер «blah» имеет методы edit, delete, create и funkify.Если путь «/ catalog / 1234», тогда «1234» - это идентификатор, и это правильный путь, если и только если вы можете найти продукт с id = 1234.Если ваш запрос «/ products / dothis / 12345», маршруты 0-2 не совпадают, но маршрут 3 совпадает, так что вы можете найти файл контроллера с именем «products» и при условии, что у него есть метод с именем «Dothis ", то вы можете назвать" Dothis (12345) ".Очевидно, что если нет метода «dothis» или «12345» не может быть найден, это неверный путь, и вы можете вызвать исключение.Обратите внимание, что вам нужно предоставить маршрут по умолчанию, и в этом случае это $ routs [3].

В вашей файловой структуре вы можете иметь:

/ app/ контроллеры/Просмотры/ etc, etc

Возможным недостатком является то, что при переписывании вы отправляете каждый запрос одному php-скрипту.

Если вас это интересует: PHPonTrax .Вы захотите взглянуть на класс маршрутизатора и класс action_controller (см. Методы process_route () и признать_route ()).

0 голосов
/ 10 августа 2010

Используйте Абсолютные пути вместо относительного в вашем меню html & scripts, и у вас не должно возникнуть проблем, поскольку он всегда будет указывать на правильный источник.

Пример абсолютного пути (обратите внимание на /):

<a href="/">Home</a>
<a href="/services">Services</a>
<a href="/mypage">My Page</a>
<a href="/mypage2">My Page 2</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...