(Yaf >=1.0.0)
Yaf_Router é o roteador padrão da extensão. Roteamento é o processo de pegar um ponto de extremidade de URI (aquela parte do URI que vem depois da base: veja Yaf_Request_Abstract::setBaseUri()) e decompô-lo em parâmetros para determinar qual módulo, controlador e ação desse controlador deve receber a requisição. Esses valores de módulo, controlador, ação e outros parâmetros são empacotados em um objeto Yaf_Request_Abstract que é então processado por Yaf_Dispatcher. O roteamento ocorre apenas uma vez: quando a requisição é recebida inicialmente e antes do primeiro controlador ser despachado. Yaf_Router foi projetado para permitir funcionalidades semelhantes a mod_rewrite usando estruturas PHP puras. É vagamente baseado no roteamento Ruby on Rails e não requer nenhum conhecimento prévio de reescrita de URL de servidor web. Ele foi projetado para funcionar com uma única regra mod_rewrite do Apache (uma destas):
Exemplo #1 Regra de re-escrita para Apache
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
Exemplo #2 Regra de re-escrita para 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]
Exemplo #3 Regra de re-escrita para Lighttpd
url.rewrite-once = ( ".*\?(.*)$" => "/index.php?$1", ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0", "" => "/index.php" )
Exemplo #4 Regra de re-escrita para Nginx
server {
listen ****;
server_name yourdomain.com;
root document_root;
index index.php index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /index.php/$1 last;
}
}
Yaf_Router vem pré-configurado com uma rota padrão Yaf_Route_Static, que corresponderá aos URIs no formato de controlador/ação. Além disso, um nome de módulo pode ser especificado como o primeiro elemento do caminho, permitindo URIs no formato módulo/controlador/ação. Por fim, também corresponderá a quaisquer parâmetros adicionais anexados ao URI por padrão - controlador/ação/var1/valor1/var2/valor2.
Nota:
O nome do módulo deve ser definido na configuração, considerando application.module="Index,Foo,Bar". Neste caso apenas Index, Foo e Bar podem ser considerados como nome do módulo. Caso não seja configurado, existirá apenas um módulo chamado "Index".
Alguns exemplos de como essas rotas são correspondidas:
Exemplo #5 Exemplo de Yaf_Route_Static (rota padrão)
// Assumindo a seguinte configuração:
$conf = array(
"application" => array(
"modules" => "Index,Blog",
),
);
Apenas controlador:
http://example/noticias
controlador == noticias
Apenas ação (quando definido yaf.action_prefer=1 no php.ini)
ação == noticias
Módulo inválido é mapeado para nome de controlador:
http://example/foo
controlador == foo
Módulo + controlador:
http://example/blog/arquivo
módulo == blog
controlador == arquivo
Módulo + controlador + ação:
http://example/blog/arquivo/lista
módulo == blog
controlador == arquivo
ação == lista
Módulo + controlador + ação + parâmetros:
http://example/blog/archive/lista/ordem/alfa/data/decres
módulo == blog
controlador == archive
ação == lista
ordem == alfa
data == decres
Pilha de rotas registradas.
Após a fase de roteamento, indica o nome de qual rota está sendo usada para a requisição atual. O nome da rota pode ser obtido por Yaf_Router::getCurrentRoute().