Skip to content

Instantly share code, notes, and snippets.

@DawTaylor
Last active December 17, 2020 14:28
Show Gist options
  • Save DawTaylor/209b6add8a5edd6eac74376487003220 to your computer and use it in GitHub Desktop.
Save DawTaylor/209b6add8a5edd6eac74376487003220 to your computer and use it in GitHub Desktop.
Mapeamento de múltiplos arquivos de rotas no Laravel 5.5

Separando arquivos de rotas no Laravel 5.5

Conforme a sua aplicação cresce é provavel que seu arquivo de rodas fique muito grande. Separar esses arquivos em arquivos menores ajuda na organização e manutenção posterior do código.

Neste exemplo separamos os arquivos de rotas da api em vários arquivos agrupados dentro do diretório routes/api.

Para fazer com que o Laravel reconheça essas rotas é preciso registrar cada arquivo de rota dentro do RouteServiceProvider.php usando o código abaixo.

Route::prefix('api')
  ->middleware('api')
  ->namespace($this->namespace)
  ->group(base_path('routes/api/arquivo.php'));

Adicionar um trecho desses para cada arquivo pode ser tão trabalhoso quanto ter um arquivo de rotas gigantesco. Para contornar esse problema utilizamos o método allFiles da facade File do Laravel para ler o conteúdo do diretório, esse método retorna um array de objetos do tipo SplFileInfo (http://php.net/manual/en/class.splfileinfo.php).

Mapeamos cada arquivo extraíndo o filename a partir do método getFilename da classe SplFileInfo, e usamos o nome do arquivo para concatenar com o caminho do diretório e registrar no RouteServiceProvider.

 foreach($files as $file) {
    Route::prefix('api')
    ->middleware('api')
    ->namespace($this->namespace)
    ->group(base_path('routes/api/' . $file->getFilename()));
  }
<?php
use Illuminate\Support\Facades\File;
//....
protected function mapApiRoutes()
{
// Realiza a leitura dos arquivos de rota dentro do diretório 'routes/api'
$files = File::allFiles(base_path('routes/api'));
// Mapeia cada arquivo registrando no RouteServiceProvider
foreach($files as $file) {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
// Concatena o nome do arquivo com o caminho da pasta definida
->group(base_path('routes/api/' . $file->getFilename()));
}
}
@lucianobragaweb
Copy link

Excelente!
Me ajudou bastante!
Obrigado por compartilhar.

@DawTaylor
Copy link
Author

Excelente!
Me ajudou bastante!
Obrigado por compartilhar.

Boa! Impressionado em saber que isso ainda é válido depois de 3 anos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment