(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://examplo/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 module == blog controlador == arquivo Módulo + controlado + ação: http://example/blog/arquivo/lista module == blog controlador == arquivo ação == lista Módulo + controlado + ação + parâmetros: http://example/blog/archive/lista/ordem/alfa/data/decres module == blog controlador == archive ação == lista ordem == alfa data == decres
registered routes stack
after routing phase, this indicated the name of which route is used to route current request. you can get this name by Yaf_Router::getCurrentRoute().