Organização de rotas no Laravel

Olá, Habr. Recentemente, concordei com a revisão de um site encomendado como freelancer. Eu esperava ver controladores que fazem tudo e ocupam mais de 200 linhas (e outras manifestações de código incorreto), mas tudo foi bastante decente. A validação não estava no controlador, o que é bastante comum. Às vezes, é claro, havia algumas inconsistências no PSR-2, mas tudo parecia bem até que eu olhei no arquivo com as rotas. Ocupava várias telas e tinha comentários sobre grupos de rotas. Entrei em contato com o desenvolvedor e ele disse que tudo havia "crescido" um pouco e concordou em corrigi-lo. Na próxima versão, vi que ele criou várias classes com métodos estáticos, para as quais transferiu o código e as chamou, como geralmente é feito, com autorização. Lembrei-me de que já havia encontrado isso e conheci um argumento assim: "A documentação não diz nada sobre rotas para arquivos diferentes". Poucos minutos depois, encontrei um artigo e o enviei ao desenvolvedor. Depois de meia hora, recebi as rotas na forma normal e decidi que este artigo seria útil para muitos iniciantes. Então esta tradução gratuita nasceu.

Se você nunca editou o arquivo RouteServiceProvider, bem-vindo ao cat.

Se você estiver trabalhando com um projeto pequeno e tiver apenas algumas rotas, não haverá problemas. Porém, quando o número de rotas é muito grande, é difícil trabalhar em um arquivo, especialmente quando você tem páginas para diferentes usuários, administradores, etc.

Inicialmente, o laravel cria 4 arquivos:

  • api.php
  • console.php
  • canais.php
  • web.php

Suponha que você planeje criar um projeto com dez páginas para cada tipo de usuário:

  • Administrador [configurações do site, estatísticas, etc. ]
  • Usuário [registro, login, gerenciamento de perfis, etc. ]
  • Convidados [blog, contatos etc. ]

Crie dois diretórios dentro das rotas :

  • web - aqui estão todas as rotas associadas à interface da web.
  • api - aqui estão todas as rotas relacionadas à API


Nós movemos api.php das rotas para o diretório routes / api e web.php em routes / web , e deixamos o restante console.php e channels.php nas rotas.

Crie o arquivo admin.php dentro de routes / web . Este arquivo conterá todas as nossas rotas da web associadas ao administrador e, em seguida, criará user.php para as rotas associadas ao usuário.



app / Providers / RouteServiceProvider.php - este arquivo é responsável por baixar todas as rotas de nosso aplicativo. O método map () chama os métodos mapApiRoutes () e mapWebRoutes () para carregar os arquivos web.php e api.php que já movemos, então vamos corrigir os caminhos para os arquivos de rota.

protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web/web.php')); } 

 protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api/api.php')); } 

Agora crie novos métodos para routes / web / admin.php e routes / web / user.php dentro de RouteServiceProvider.php

 protected function mapAdminWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('admin') ->group(base_path('routes/web/admin.php')); } 

 protected function mapUserWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('user') ->group(base_path('routes/web/user.php')); } 

Observe que neste código é possível adicionar espaço para nome, middleware, prefixo etc. para os caminhos.

Em seguida, basta chamá-los de map ():

 public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapAdminWebRoutes(); $this->mapUserWebRoutes(); } 

Última etapa:

Abra rotas / web / user.php e adicione uma rota de teste:

 Route::get('/test', function () { return response(' ', 200); }); 

Vá para site.local / user / test, você deverá ver o texto "Rota de teste".

Source: https://habr.com/ru/post/pt474788/


All Articles