Rotas como muitos sabem, serve para que nós possamos definir a regra de um determinado caminho, especificado o que fazer quando uma url é assertiva. Existem várias formas de receber e tratar parâmetros de rotas no Laravel, porém aqui vamos ver duas das aplicações.
É importante enfatizar que devemos sempre olhar para a nossa regra de negócio ao trabalhar com rotas, assim conseguimos definir um roteamento mais assertivo e garantir que tudo está funcionando perfeitamente.
Como citado acima, devemos sempre olhar para a nossa regra de negócio, sendo assim, vamos desenvolver um método que recebe o nome de uma cidade e seu respectivo estado. As duas informações são obrigatórias, retornando um JSON como resposta.
Veja o código do nosso método abaixo, perceba que no parâmetro temos as variáveis/parâmetros chamadas $cidade e outra de $estado.
public function minhaFuncao(string $cidade, string $estado)
{
return response()->json([
'cidade' => $cidade,
'estado' => $estado
]);
}
Quando declarar a nossa rota, informamos os parâmetros através do caractere “{“, seguido do nome da variável e por fim “}”. Exemplo: {minha-variavel}.
Podemos declarar quantos parâmetros a gente precisar, porém a ordem que esses parâmetros são declarados na rota devem ser os mesmos dos métodos. É importante nunca declarar variáveis diferentes para a rota e outra para o método.
Veja um exemplo que não irá resultar em erro, porém a convenção nos diz para sempre manter os mesmos nomes que serão utilizados no método.
Route::get('/obter-informacao/{teste}/{teste2}', [LayoutController::class, 'minhaFuncao']);
Agora veja o exemplo recomendado.
Route::get('/obter-informacao/{cidade}/{estado}', [LayoutController::class, 'minhaFuncao']);
É importante enfatizar que os dois exemplos de rotas acima estão corretos e funcionais, porém o segundo é o mais aceito pela comunidade, já que é visível na rota que esperamos por uma cidade e um estado, enquanto o primeiro exemplo não.
Exemplo de chamada: http://localhost:8000/obter-informacao/prudente/sp
Agora vamos imaginar que a nossa regra de negócio espera apenas pela cidade, já que o evento Xpto está acontecendo no estado de São Paulo, tornando a informação da UF algo irrelevante.
Para garantir um parâmetro opcional, vamos ter que declarar um valor padrão na assinatura do nosso método. É importante que os parâmetros opcionais sejam sempre os últimos, conforme exibido no código abaixo.
public function minhaFuncao(string $cidade, string $estado = 'SP')
{
return response()->json([
'cidade' => $cidade,
'estado' => $estado
]);
}
Agora na nossa rota, devemos apenas adicionar o caractere “? “antes do último colchete, conforme o exemplo abaixo. Note também que a rota opcional é a última a ser definida.
Route::get('/obter-informacao/{cidade}/{estado?}', [LayoutController::class, 'minhaFuncao']);
Exemplo de chamada: http://localhost:8000/obter-informacao/prudente
No exemplo de código acima, uma vez que o estado não for especificado na rota, o valor SP será definido, mas se a gente especificar PR, então o valor SP será ignorado e passa a valer o que está na rota.
Agora que você já entendeu o básico do funcionamento dos parâmetros de rota, poderá consultar a documentação oficial para obter mais exemplos de outras aplicações.
Documentação oficial: https://laravel.com/docs/8.x/routing
Agrupando rotas no Laravel: https://satellasoft.com/artigo/php/agrupando-rotas-no-laravel
Trabalhando com rotas no Laravel: https://satellasoft.com/artigo/php/trabalhando-com-rotas-no-laravel