laravelbrasil / forum

Ama Laravel? Torne se um Jedi e Ajude outros Padawans
GNU General Public License v3.0
252 stars 13 forks source link

Organizar rotas em arquivos ou classes separados #22

Closed williamduarteoficial closed 7 years ago

williamduarteoficial commented 7 years ago

Estou trabalhando em um aplicativo de grande porte, mas eu quero separar estes grupos de rotas do arquivo web.php, pois senão daqui a pouco ele estará gigante.

Tem como chamar no arquivo web.php, não seria muito elegante usar require neste arquivos abaixo:

admin.php - users.php - wizard.php - etc.php

Há uma outra alternativa? Tipo o Auth faz!

andreportaro commented 7 years ago

William, basta usar o exemplo do route service provider.

Você pode ver que ele mapeia grupos de rotas e inclui o arquivo de rotas no grupo (web.php, API.php, etc)

Em 20 de fev de 2017 12:44, "William Duarte" notifications@github.com escreveu:

Estou trabalhando em um aplicativo de grande porte, mas eu quero separar estes grupos de rotas do arquivo web.php, pois senão daqui a pouco ele estará gigante.

Tem como chamar no arquivo web.php, não seria muito elegante usar require neste arquivos abaixo:

admin.php - users.php - wizard.php - etc.php

Há um outra alternativa? Tipo o Auth faz!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/laravelbrasil/forum/issues/22, or mute the thread https://github.com/notifications/unsubscribe-auth/AFObii9fx34rgQAPgK2Mrr4wDpFNK4Ncks5rebTLgaJpZM4MGVOf .

zabaala commented 7 years ago

Você pode criar um provider pra cada arquivo de rota.

Uma boa recomendação é estruturar o projeto como o @hernandev sugere em alguns vídeos lá no codecasts. Dá uma passeada por lá, vc vai encontrar boas respostas.

paulofreitas commented 7 years ago

@williamduarteoficial Conforme muito bem sugerido pelo @andreportaro, você pode estar analisando o código da classe App\Providers\RouteServiceProvider para tomar como base: https://github.com/laravel/laravel/blob/master/app/Providers/RouteServiceProvider.php

Por padrão o Laravel centraliza as rotas num único service provider que por sua vez carrega as rotas de arquivos procedurais. Note que isso é apenas para simplificar a estrutura padrão - conforme muito bem lembrado pelo @zabaala, você pode perfeitamente ter quantos service providers quiser/precisar, e inclusive não usar arquivos procedurais, declarando as rotas em classes (o que fica mais fácil de documentar o código). ;-)

Em projetos grandes você muito provavelmente vai acabar adotando arquiteturas como Domain-Driven Development ou Hexagonal Architecture ou pelo menos modularizar a aplicação. Nestas arquiteturas é muito comum você separar as rotas por cada domínio da aplicação. Um bom exemplo de arquitetura baseada no DDD é o código do próprio Codecasts! 😃

Seguem exemplos da arquitetura do Codecasts, que fazem essa abordagem de múltiplos service providers e rotas definidas em classes:

Navegando pelo código-fonte do diretório app\Units você irá ver que tudo ali segue essa mesma estrutura, onde cada "módulo" fica responsável por declarar e registrar as próprias rotas.

Numa aplicação de grande porte, esta seria uma abordagem muito interessante, pois facilita bastante tanto na organização como na documentação do código! 😉

ianrodrigues commented 7 years ago

É isso aí!

williamduarteoficial commented 7 years ago

Show galera e valeu @paulofreitas por esta informações, vou estuda-las afinco.

matheusgomes17 commented 7 years ago

Boa noite!

Não sei se é a melhor opção, mas, eu gosto bastante de separa minhas rotas conforme o modelo desse pacote: https://github.com/rappasoft/laravel-5-boilerplate/tree/master/routes

usando o metodo includeRouteFiles() da para colocar todos as rotas de um respectivo departamento em uma pasta.