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 ()).