Tableless

Busca Menu

Rotas dinâmicas no Silex

Seja o primeiro a comentar por

Continuando nossa jornada sobre o Silex Framework, neste post falarei sobre rotas dinâmicas. Se você não está familiarizado com o Silex, confira nosso primeiro post Conhecendo e instalando o Silex.

Rotas dinâmicas são a possibilidade de passar parâmetros nas rotas da sua aplicação. O Silex possui diversos métodos para facilitar o uso dessa dinâmica em suas rotas.

Utilização

Para tornar sua rota dinâmica, veja o código abaixo:

<?php
use Silex\Application;
require 'vendor/autoload.php';
$app = new Application();
$app->get('users/{name}', function($name){
    return 'Olá, ' . $name;
});
$app->run();

O que nos interessa nesse momento, são as linhas de 5 e 6. Na linha 5 definimos nossa rota users, que receberá requisições do tipo GET. Perceba que entre chaves {}, incluímos um elemento chamado name, ou seja, esse é o parâmetro da nossa rota users. Agora tudo que passarmos na URL após chamada a rota, poderemos manipular em nosso callback, mas para isso devemos passar o mesmo parâmetro da rota como parâmetro do nosso callback, como mostrado na mesma linha 5. Na linha 6 apenas retornamos como saída o valor passado na rota. Por exemplo, se acessarmos no navegador o seguinte link http://url_de_minha_app.com.br/users/Nando, teríamos como saída:

Olá, Nando

Se você deseja passar mais parâmetros, apenas separe os mesmos com /, como mostrado abaixo:

<?php
...
$app->get('users/{name}/{email}', function($name, $email){
    //Sua_logica_aqui
});
...

Valores Default

Se você deseja definir um valor default para seus parâmetros de rota, é muito simples. O Silex possui um método para isso. Através do método value() você definirá valores padrões para estes parâmetros, e quando acessar suas rotas sem informar nenhum valor esperado, entra em ação os valores definidos por padrão. Para usar o método value():

<?php
...
$app->get('users/{name}', function($name){
    return 'Olá, ' . $name;
})
->value('name', NULL);
...

Na linha 6 defino o método value que têm como primeiro parâmetro o nome definido para o parâmetro da rota, e o segundo parâmetro do método value recebe o valor default que você desejar. Sempre que acessarmos a rota users sem definir nenhum valor após a mesma, nosso parâmetro name receberá o valor NULL. A partir daí você fica livre para tratar como quiser a lógica da sua aplicação.

O método convert()

Se você deseja garantir o tipo do valor passado ou apenas deseja conversões simples com estes valores, o método convert foi feito para tal operação. Para utilizá-lo:

...
$app->get('users/{name}', function($name){
    return 'Olá, ' . $name;
})
->value('name', NULL)
->convert('name', function($name){ return (string) $name; });
...

O método recebe 2 parâmetros: o primeiro é o nome do parâmetro informado na rota e o segundo um callback, onde realizamos nossas conversões. Neste exemplo, garanto apenas que os valores passados na rota users serão de fato do tipo string, como mostrado na linha 6 do código acima.

Conclusão

Vimos como é simples trabalhar com rotas dinâmicas em nossas aplicações Silex, e com os métodos auxiliares nossa aplicação de rotas fica ainda mais robusta.

Na sessão ‘Usage’ da documentação do Silex, você encontrará mais opções além das mostradas aqui.

Publicado no dia