# 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://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

## Resumo da classe

class Yaf_Router {
/* Propriedades */
protected $_routes;
protected $_current;
/* Métodos */
public function __construct()
public function addConfig(Yaf_Config_Abstract `$config`): bool
public function addRoute(string `$name`, Yaf_Route_Abstract `$route`): bool
public function getCurrentRoute(): string
public function getRoute(string `$name`): Yaf_Route_Interface
public function getRoutes(): mixed
public function route(Yaf_Request_Abstract `$request`): bool
}

## Propriedades

_routes

  Pilha de rotas registradas.

_current

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

## Índice

- Yaf_Router::addConfig — Adiciona as rotas definidas na configuração
- Yaf_Router::addRoute — Adiciona nova rota
- Yaf_Router::__construct — Construtor de Yaf_Router
- Yaf_Router::getCurrentRoute — Obtém o nome efetivo da rota
- Yaf_Router::getRoute — Obtém uma rota pelo nome
- Yaf_Router::getRoutes — Obtém rotas registradas
- Yaf_Router::route — Encaminha uma requisição

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open