Modularizando Sua Aplicação Laravel

Olá, tudo bem?!

Criar aplicações reutilizáveis, manuteníveis, de fácil compreensão pelos membros do time é o desafio do dia a dia.

Sem sombra de dúvidas é o correto e devemos seguir esta linha de pensamento, pois assim temos uma aplicação saudável, facilitando novas implementações.

O Laravel é um grande framework, onde vem crescendo cada vez mais ao longo dos anos, em minhas pesquisas e estudos encontrei uma maneira de construir aplicações de forma modular no framework, e irei compartilhar com vocês os resultados dos estudos.

Para melhor aproveitamento do material a seguir recomenda-se o conhecimento básico sobre Laravel e composer.

 

Dependências

Para construirmos nosso exemplo são necessários:

 

Instalação

Devemos iniciar instalando o Laravel, execute o seguinte comando pelo terminal:

Devemos aguardar até que todo o processo seja finalizado, em seguida devemos acessar o projeto criado, execute o seguinte comando:

Após acessar o projeto devemos instalar o componente laravel-modules, para isso execute o seguinte comando:

Aguarde o processo de instalação do pacote finalizar.

 

Configurações

É necessário configurar o provider e alias  (apenas para versões inferiores ao Laravel 5.5) do pacote que instalamos para isso acesse o arquivo config/app.php.

Localize o array de configurações dos providers e inclua a seguinte informação no final do array:

Em seguida configure o alias, esse array é declarado logo após o provider, inclua a seguinte instrução.

Com as devidas configurações realizadas, devemos publicar o provider do componente, para isso execute o seguinte comando na raiz do projeto por meio do terminal, sendo:

Devemos agora registrar a namespace de origem ao nosso diretório modules que será criado, para isso acesse o arquivo composer.json na raiz do projeto e inclua o seguinte trecho no autoload:

Para finalizar devemos executar o dump do autoload do composer, para que o mesmo registre os módulos, para  isso execute o seguinte comando:

Devemos configura o acesso ao banco de dados, para isso crie um banco de dados com o nome laravel_modules, em seguida acesse o arquivo .env localizado na raiz do nosso projeto e configure a seção para acesso ao MySQL, abaixo podemos ver um exemplo.

 

Criando o modulo Products

Para criar o módulo, devemos executar o seguinte comando no terminal:

Após finalizar o processo, será criado o diretório Modules na raiz do nosso projeto, diretório ao qual é responsável por armazenar todos os módulos que forem criados na aplicação. Dentro dele encontraremos o diretório Products com a seguinte estrutura:

A estrutura não por acaso é similar a atual estrutura do Laravel, feito para melhor compreensão e correlação dos diretórios e suas funções.

 

Criando Model

Devemos criar nossa model que irá representar a tabela products, execute o seguinte comando:

Após finalização, o arquivo encontra-se em Modules\Products\Entities.

No atributo fillable devemos inserir dois parâmetros, title e description.

Vamos inserir também  o atributo table.

 

Criando Migrations

Para criar a migration, referente a tabela products devemos executar o seguinte comando:

O comando acima se assemelha ao nativo do Laravel, porém é necessário informar o nome do módulo no final determinando o local de criação da migration.

Após execução podemos acessar o diretório modules\Products\Database\Migrations para visualizar o arquivo.

Demos agora criar a estrutura da tabela no método up, sendo:

Com isso criamos uma estrutura simples para a tabela products, porém suficiente para nosso exemplo.

Para executar nossa migration, execute o seguinte comando:

Após finalização nossa tabela products será criada.

 

Criando Seed

Podemos também popular previamente nossa tabela de produtos, pois quando um novo integrante do projeto for configurar o projeto ele já terá tudo funcionando, sem ter que ficar criando registros para usar o sistema, para criar o seeder devemos executar o seguinte comando:

Nossa seed encontra-se no diretório Modules\Database\Seeders\ProductsDatabaseSeeder.

Com o arquivo criado basta seguir os mesmos processo de um a aplicação laravel para inserção dos dados no seeder.

 

Considerações finais

Como podemos observar o recurso é robusto,  de fácil compreensão, sua curva de aprendizagem é baixa e facilita a modularização das aplicações Laravel.

Espero que tenham apreciado o conteúdo, convido a todos que deixem um comentário e que compartilhe o conteúdo com seus colegas.

Grande abraço e sucesso em seus projetos!

6 comentários em “Modularizando Sua Aplicação Laravel”

    1. Olá, Icaro.
      Fico feliz que tenha apreciado o conteúdo, obrigado pelo toque foi corrigido.
      Compartilhe com seus amigos para que mais pessoas possam chegar ao conteúdo.
      Grande abraço e sucesso em seus projetos.

  1. Olá amigo, meu nome e Vinicius e estou trabalhando com o Framework Laravel e também utilizando um pacote chamado jeroennoten/Laravel-AdminLTE gostaria de fazer uma integração do seu projeto onde ao criar um modulo também crie uma opção no meu menu de navegação, sou inexperiente no assunto, por isso peço sua ajuda.

    1. Olá, Vinicius.

      Ambos os pacotes trabalham de forma individual, não havendo uma integração da maneira que deseja. O caminho mais simples para isso é que você cadastre manualmente o recurso no banco de dados (caso esteja sendo feito assim) ou sua inclusão no array de configuração do menu.

      Para fazer que seja feita de maneira automática, teria que ser construído a estrutura de interação, o que não sei se valeria a pena e esforço.

      Fico feliz que tenha apreciado o conteúdo, peço que ajude compartilhando para que mais pessoas possam conhecer.

      Sucesso em seus projetos.

    1. Olá, Nelson.

      Não tenho essa resposta com 100% de certeza, entretanto todos os recursos que o Laravél módules dispõem corresponde a funcionalidades nativas do Laravel, com isso acredito que sim, deva funcionar sem problemas. Recomendo testes antes de utilizar em projetos oficiais.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *