Быстрая маршрутизация URL-адреса в вызов функции для соответствия правилам API - PullRequest
1 голос
/ 16 августа 2011

Мне нужен способ быстрой маршрутизации URL-адресов на вызов Class-> Method () с использованием синтаксиса конфигурации, не программирующего каждый случай.

У меня есть веб-инструмент, который берет URL-адрес и использует его для определениякласс объекта, на который ссылается URL, какой метод класса использовать и параметры этого метода.Я использую .htaccess для направления всех запросов в index.php, поэтому я читаю путь из $ _ SERVER ['PATH_INFO'] и оттуда фильтрую и разбираю его, чтобы получить отдельные компоненты.

Таким образом, www.example.com/user/view/12345 создаст пользовательский контроллер и вызовет функцию просмотра, которая будет отображать профиль пользователя.По сути, он будет делать следующее:

$url = explode("/",trim($_SERVER['PATH_INFO'],"/");
$class = $url[0] . "_Controller";
$page = new $class;
echo call_user_func_array(array($page, $url[1]), $url);

Теперь это, конечно, упрощение, есть много других движущихся частей, не показанных здесь, __autoload (), система шаблонов страниц и т. Д., НоВы поняли идею.URL-адрес имя_домена / класс / функция / [arg1] / [arg2] / [arg3] /..., и код быстро может определить, что необходимо для отрисовки страницы.

К сожалению, сайт должен соответствовать правилам API, продиктованным политикой.В соответствии с политикой, URL должен быть либо:

имя_домена / class / entityid / function_alias / [arg1] / [arg2] / [arg3] /... Для инструментов, которые влияют на определенныйсущность

имя_домена / класс / function_alias / [arg1] / [arg2] / [arg3] /... Для инструментов, не привязанных к отдельной сущности

У меня естьрешил это, но это грязно.Вместо вызова функции в $ url [1] для класса в $ url [0] и передачи ему оставшихся аргументов, я определяю класс объекта из $ url [0], создаю его экземпляр, а затем передаю URL-адрес объекта маршрут ($ url) метод.Оттуда у меня есть грязная комбинация переключателей и операторов if, которая переводит URL в правильный метод класса.

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

"user/$1"           => user/view/$1
"user/add"          => user/add
"user/$1/edit"      => user/edit/$1
"user/$1/key/$2"    => user/edit_key/$1/$2

Мне нужен синтаксис и алгоритм, который быстро определит, каков реальный целевой класс и метод URL, создает его ипередайте ему обязательные значения url.

1 Ответ

1 голос
/ 16 августа 2011

Вероятно, существуют классы маршрутизации, которые будут читать конфигурационный файл, но я не мог легко найти какой-либо.

Вот несколько примеров, или люди, создающие относительно элегантные решения на чистом PHP:
Маршрутизация URL-адресов приложения PHP
http://blog.sosedoff.com/2009/07/04/simpe-php-url-routing-controller/

Подходит ли вам что-нибудь из этого?

Конечно, вы также можете выполнять эти перенаправления исключительно с помощью переписывания Apache.

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