Я использую простую инфраструктуру, которая обрабатывает запросы на основе параметров запроса.
http://example.com/index.php?event=listPage
http://example.com/index.php?event=itemView&id=1234
Я хочу поместить чистые URL перед этим, чтобы вы могли получить к нему доступ таким образом:
http://example.com/list
http://example.com/items/1234
Я знаю, как работают маршруты и диспетчеризация, и я мог бы написать это сам. Но я бы предпочел воспользоваться всем кодом, который уже решает эту проблему. Кто-нибудь знает универсальную библиотеку или класс, который предоставляет эту функциональность, но позволит мне вернуть все, что я хочу из совпадения маршрута ? Как то так.
$Router = new Router();
$Router->addRoute('/items/:id', 'itemView', array( 'eventName' => 'itemView' ));
$Router->resolve( '/items/1234' );
// returns array( 'routeName' => 'itemView',
// 'eventName' => 'itemView,
// 'params' => array( 'id' => '1234' ) )
По сути, я мог бы выполнять диспетчеризацию самостоятельно, основываясь на значениях, разрешенных по пути. Я не возражаю против удаления этого из фреймворка, если это не слишком много проблем (и до тех пор, пока позволяет лицензия). Но обычно я нахожу, что маршрутизация / диспетчеризация в фреймворках слишком слаба для такой перепрофилирования. И мои поиски, кажется, показывают, что люди пишут это сами, если они не используют фреймворки.
Хорошее решение будет поддерживать следующее:
- указать маршруты с двоеточием или регулярным выражением
- разбирает параметры вне маршрутов и как-то возвращает их
Поддержка быстрого обратного просмотра выглядит так:
$Router->get( 'itemView', array( 'id' => '1234' ) );
// returns 'items/1234'
Любая помощь приветствуется.