International PHP Conference Berlin 2025

A classe Yaf_Router

(Yaf >=1.0.0)

Introdução

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
ou (preferível):

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]
Se o Lighttpd for usado, a seguinte regra de re-escrita é válida:

Exemplo #3 Regra de re-escrita para Lighttpd

url.rewrite-once = (
  ".*\?(.*)$" => "/index.php?$1",
  ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0",
  "" => "/index.php"
)
Se o Nginx for usado, use a seguinte regra de re-escrita:

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;
  }
}

Rota padrão

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

Resumo da classe

class Yaf_Router {
/* Propriedades */
protected $_routes;
protected $_current;
/* Métodos */
public __construct()
public addRoute(string $name, Yaf_Route_Abstract $route): bool
public getRoutes(): mixed
public route(Yaf_Request_Abstract $request): bool
}

Propriedades

_routes

registered routes stack

_current

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().

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top