Я использую простую структуру, которая обрабатывает запросы на основе параметров запроса.
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'
Любая помощь приветствуется.
GluePHP может быть очень близок к тому, что вы хотите. Он предоставляет один простой сервис: сопоставляет URL-адреса классам.
require_once('glue.php'); $urls = array( '/' => 'index', '/(?P<number>\d+)' => 'index' ); class index { function GET($matches) { if (array_key_exists('number', $matches)) { echo "The magic number is: " . $matches['number']; } else { echo "You did not enter a number."; } } } glue::stick($urls);