Roteamento

Esta seção apresenta mais conteúdo sobre a maneira de tratar rotas e definir controllers.

Roteamento dinâmico

O roteamento dinâmico é um recurso que permite definir parâmetros de rota. O exemplo a seguir demonstra como criar uma rota para acessar um post de um blog com base no seu identificador:

$app->get('/home/{id}', function($id) use ($app) {
    if (!existePost($id)) {
        $app->abort(404, 'Post não encontrado');
    }
    $post = consultarPost($id);
    return '<h1>' . $post['titulo'] . '</h1>';
});

O parâmetro de rota é definido entre chaves. Neste caso a rota é /home/{id} e o parâmetor é id, o que significa que a URL deve ser chamada como /home/1. Perceba que o parâmetro da rota torna-se disponível como parâmetro do controller, em outras palavras, o Silex injeta o parâmtro de rota id no controller.

A utilização de parâmetros de rota é a primeira forma de passar informações para um controller.

Convertendo Parâmetros de Rota

Pode ser necessário tratar o valor de um parâmetro de rota antes de injetá-lo no controller. Para fazer isso, utilize o método convert(). Exemplo:

$app->get('/usuarios/{id}', function($id) {
    // ... procurar o usuário pelo id
})->convert('id', function($id) {
    return (int) $id;
});

O primeiro parâmetro do método convert() é o nome do parâmetro de rota, neste caso, id. O segundo parâmetro é uma função que aceita como parâmetro o $id. Neste caso, a função anônima recebe o parâmetro id e retorna seu valor representado como número inteiro.

Restrições

Outra forma de tratar valores de parâmetros de rota é por meio de restrições. Para isso, é utilizado o método assert(). Exemplo:

$app->get('/usuarios/{id}', function($id) {
    // ... procurar o usuário pelo id
})->assert('id', '\d+');

A restrição representada por assert('id', '\d+') indica que o parâmetro id precisa combinar com a expressão regular \d+, ou seja, precisa ser um número de um ou mais dígitos.

results matching ""

    No results matching ""