Skip to content

Latest commit

 

History

History
151 lines (108 loc) · 6.68 KB

2-Rotas.md

File metadata and controls

151 lines (108 loc) · 6.68 KB

3.2 Rotas

Agora que configuramos o nosso projeto e entendemos como funciona a sua arquitetura chegou a hora de começarmos a entender as rotas.

As rotas são como caminhos que temos nas URLs da nossa aplicação, por exemplo, no endereço localhost:8000/home a nossa rota é /home, se tivermos um blog e quisermos acessar algum post possívelmente o seu endereço será algo como localhost:8000/posts/1, nesse exemplo a rota é /posts/1.

Nós precisamos de rotas para saber qual parte da nossa aplicação o usuário quer acessar e para isso configuramos uma ação para cada rota de nossa aplicação, podemos configurar a rota /home para exibir a página inicial do nosso site, a rota /produtos para uma página com a listagem de todos os produtos e assim por diante.

Agora que sabemos o que são rotas e para o que servem chegou a hora de criar as nossas próprias, para isso abra a pasta routes na raiz da nossa aplicação, é nessa pasta que ficam as rotas por padrão, dentro dessa pasta teremos 4 arquivo: api.php, channels.php, console.php e web.php, cada arquivo é refêrente a um tipo de rota, por enquanto iremos abrir apenas o arquivo routes/web.php e ignorar os outros.

Dentro do arquivo routes/web.php vamos criar uma rota simples, a rota será /teste e ela irá apenas exibir texto simples, iremos passar uma função anônima que irá retornar esse texto como callback, para isso vamos inserir o seguinte código ao fim do arquivo:

Route::get('teste', function () {
    return 'Essa é a minha primeira rota';
});

Acima estamos utilizando o método get da classe Route e passando dois parâmetros, o path da rota como 'teste' e uma função anônima que retorna uma string.

Com isso quando o usuário acessar a rota /teste o Laravél irá buscar esse rota, executar a função anônima e exibir o seu retorno.

Para testar essa rota é só adicionar /teste ao fim da URL do seu projeto: http://localhost:8000/teste. Se tudo estiver certo você irá ver o texto "Essa é a minha primeira rota" no seu navegador.

Com a nossa primeira rota criada vamos seguir para entender um pouco mais sobre as rotas.

Metódos HTTP

Como podemos observar na rota anterior nós usamos o método get, isso é refêrente ao método HTTP GET, sempre que o usuário acessar uma página no navegador ele faz uma requisição do tipo GET, caso exista um formulário do tipo POST e ele envie esse formulário para alguma rota aquela requisição será do tipo POST, nesse caso você deverá usar o método Route::post para capturar essa ação.

Um entendimento básico do protocolo HTTP vai lhe ajudar muito a entender todo esse tutorial. Caso você não saiba o que são métodos HTTP confira o artigo Métodos de requisição HTTP da Mozilla para ter um entendimento sobre o assunto.

Existem 6 métodos disponíveis para configurar as rotas, sendo eles:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Caso você precise criar uma rota que execute em mais de um método HTTP você pode utilizar o método match e se precisar que uma rota execute para todos os verbos HTTP utilize any:

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});

Parâmetros na URL

Eventualmente você irá precisar passar parâmetros na URL, como por exemplo o id de um produto como /produtos/1, a slug de um um post como posts/aprendendo-laravel ou qualquer tipo de parâmetro.

Para configurar uma rota que recebe um parâmetro dinâmico você deve capturar esse parâmetro com {}, por exemplo, para capturar o id de um produto você pode utilizar /produtos/{id}, você irá receber esse id como parâmetro na função anônima que você passa como callback:

Route::get('posts/{id}', function ($id) {
    return "O post de id:" . $id;
});

Caso você precise de múltiplos parâmetros você irá os receber na mesma sequência que informou:

Route::get('posts/{post}/comentarios/{comment}', function ($postId, $commentId) {
    return "O post de id: $postId e comentário $commentId";
});

Parâmetros opcionais

Caso você precise de parâmetros opcionais basta inserir ? após o nome do parâmetro:

Route::get('usuario/{name?}', function ($name = null) {
    return $name;
});

Você também pode definir um valor padrão para o parâmetro:

Route::get('usuario/{name?}', function ($name = "Charlie") {
    return $name;
});

Expressões regulares

Você pode definir o formato de um parâmetro com uma expressão regular usando o método where. O método where recebe o nome do parâmetro e a expressão regular em seguida:

Route::get('produtos/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Rotas de redirecionamento

Se você precisar de uma rota que redireciona para outra você pode utilizar o método redirect:

Route::redirect('/se-vier-aqui', '/vai-cair-aqui');

Por padrão o método redirect retorna o status HTTP 302, se você quiser alterar esse status você pode passar como terceiro parâmetro o novo statu:

Route::redirect('/se-vier-aqui', '/vai-cair-aqui', 301);

Você pode usar permanentRedirect para redirecionamentos permanentes, esse método sempre irá retornar o status 301:

Route::permanentRedirect('/se-vier-aqui', '/vai-cair-aqui');

Caso você não saiba o que são métodos HTTP você pode conferir o artigo Códigos de status de respostas HTTP da Mozilla.

Nomeando rotas

Por fim você pode nomear as suas rotas, isso vai facilitar futuros redirects para essas rotas:

Route::get('usuario/perfil', function () {
    //
})->name('profile');

Assim quando você estiver em outro local do seu código e quiser redirecionar para a rota profile basta utilizar a função route:

// Url será igual a URL da rota profile
$url = route('profile');

// Irá redirecionar o usuário para a rota profile
return redirect()->route('profile');

Caso uma rota tenha parâmetros você irá passar eles em um array como segundo parâmetro:

$url = route('product', ['id' => 1]);

Se você passar parâmetros adicionais eles serão automaticamente convertidos para query string em sua URL:

$url = route('products', ['id' => 1, 'photos' => true]);

// /produtos/1?photos=1

Com um entendimento de rodas você já pode seguir para a próxima etapa do tutorial: Criando controllers