Клас Yaf_Router
(Yaf >=1.0.0)
Вступ
Yaf_Router – це стандартний каркасний маршрутизатор. Маршрутизація - це процес отримання кінцевої точки URI (тої частини URI, яка йде після базового URI: дивіться Yaf_Request_Abstract::setBaseUri()) та розкладання її на параметри, щоб визначити, який модуль, контролер та дія повинні отримати запит. Ці значення модуля, контролера, дії та інших параметрів упаковані в об'єкт Yaf_Request_Abstract, який потім обробляється Yaf_Dispatcher. Маршрутизація відбувається лише один раз: при початковому отриманні запиту та до відправлення першого контролера . Yaf_Router призначений для забезпечення функціональності, подібної до mod_rewrite, з використанням чистих структур PHP. Він заснований на маршрутизації Ruby on Rails і не вимагає будь-яких попередніх знань про перезапис URL веб-сервера. Він призначений для роботи з одним правилом Apache mod_rewrite (одним з):
Приклад #1 Правило перезапису Apache
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
або (переважно):
Приклад #2 Правило перезапису Apache
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s[OR]RewriteCond %{REQUEST_FILENAME} -l[OR]RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.* [NC,L]RewriteRule ^.*$ index.php[NC,L]
У разі використання Lighttpd використовуйте таке правило перезапису:
Приклад #3 Правило перезапису для Lighttpd
url.rewrite-once = ( ".*\?(.*)$" => "/index.php?$1", ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0", "" => "/index.php" )
Під час використання Nginx використовуйте таке правило перезапису:
Приклад #4 Правило перезапису Nginx
server { listen****; server_name yourdomain.com; root document_root; index index.php index.md;
if (!-e $request_filename) { rewrite ^/(.*) /index.php/$1 last; } }
Маршрут за замовчуванням
Yaf_Router поставляється з попередньо налаштованим маршрутом за умовчанням Yaf_Route_Static, який буде відповідати URI у формі контролера/дії. Крім того, ім'я модуля може бути зазначено як перший елемент шляху, що дозволяє використовувати URI форми модуля/контролера/дії. Нарешті, він також буде відповідати будь-яким додатковим параметрам, які додаються до URI за замовчуванням - controller /action/var1/value1/var2/value2.
Зауваження :
Ім'я модуля має бути визначено у конфігурації з урахуванням application.module="Index,Foo,Bar", у цьому випадку тільки index, foo та bar можуть розглядатися як ім'я модуля. Якщо не налаштовано, є лише один модуль під назвою "Index".
Деякі приклади відповідності таких маршрутів:
Приклад #5 Приклад использованияYaf_Route_Static(маршрут за замовчуванням)
// Припускаючи наступне налаштування: $conf = array( "application" => array( "modules" => "Index,Blog", ), );
Тільки контролер:http://example/newscontroller == news Тільки дія (якщо визначено yaf.action_prefer=1 в php.ini) action == news
Невірний модуль відображається на ім'я контролера:http://example/foocontroller == foo
Модуль + контролер:http://example/blog/archivemodule == blog controller == archive
Модуль + контролер + дія:http://example/blog/archive/listmodule == blog controller == archive action == list
Модуль + контролер + дія + параметри:http://example/blog/archive/list/sort/alpha/date/descmodule == blog controller == archive action == list sort == alpha date == desc
Огляд класів
class Yaf_Router
{
/* Свойства */
protected
$_routes;
protected
$_current;
/* Методы */
public __construct()
public addConfig(Yaf_Config_Abstract $config): bool
public addRoute(string $name, Yaf_Route_Abstract $route): bool
public getCurrentRoute(): string
public getRoute(string $name): Yaf_Route_Interface
public getRoutes(): mixed
public route(Yaf_Request_Abstract $request): bool
}
Властивості
_routes
стек зареєстрованих маршрутів
_current
після фази маршрутизації вказується назва, який маршрут використовується для маршрутизації поточного запиту. Ви можете отримати його ім'я за допомогою Yaf_Router::getCurrentRoute()
Зміст
- Yaf_Router::addConfig— Додає настроєні маршрути до маршрутизатора
- Yaf_Router::addRoute— Додає новий маршрут до маршрутизатора
- Yaf_Router::__construct - Конструктор класу Yaf_Router
- Yaf_Router::getCurrentRoute— Отримує ім'я діючого маршруту
- Yaf_Router::getRoute— Отримує маршрут на ім'я
- Yaf_Router::getRoutes— Отримує зареєстровані маршрути
- Yaf_Router::route - Призначення route