Criando e publicando pacotes no Laravel

Criando e publicando pacotes no Laravel

No desenvolvimento de aplicações é comum escrever muito código que é usado repetidamente em diferentes projetos. Para simplificar esse processo, existem pacotes, que consistem em um conjunto de arquivos e códigos encapsulados, próprios ou de terceiros. A utilização de pacotes nos permite implementar funcionalidades com mais facilidade, economizando tempo e esforço no processo.

Laravel e PHP oferecem um grande número de ferramentas e recursos para o desenvolvimento de pacotes, permitindo-nos desacoplar nossas aplicações em diferentes partes, facilitando a manutenção e escalabilidade a longo prazo.

Neste artigo, criaremos um pacote básico chamado Session Checker, que terá como objetivo verificar se um usuário possui uma sessão aberta. Se sim, ele informará que foi fechado. Isso evita que os usuários tenham várias sessões abertas ao mesmo tempo e melhora a segurança e a confiabilidade do aplicativo.


Como criar um pacote no Laravel?

Para desenvolver pacotes no Laravel é necessário utilizar o Composer, o gerenciador de dependências do PHP. Composer é uma ferramenta muito útil que ajuda os desenvolvedores a gerenciar as bibliotecas e dependências necessárias em cada projeto de forma organizada e eficiente. Normalmente, você especifica as dependências do projeto em um arquivo composer.json e depois instala todas as dependências com um único comando. O Composer também é responsável por atualizar automaticamente as dependências quando novas versões são lançadas.

Criar a estrutura básica de um pacote

  1. Crie uma pasta chamada Listopro (ou o nome que desejar) no diretório onde você trabalha. Esta pasta será a base do seu projeto.
  2. Dentro da pasta Listopro, crie uma pasta chamada packages, que conterá todos os seus pacotes personalizados.
  3. Dentro da pasta packages, crie uma pasta com o nome do seu usuário GitHub. No meu caso, usarei nicotc.
  4. Dentro da pasta nicotc, crie uma pasta com o nome do seu pacote personalizado. Nesse caso, você pode chamá-lo de session-checker.
  5. Dentro da pasta session-checker, crie uma pasta chamada src, que conterá todo o código fonte do seu pacote.


Sua árvore de pastas ficará assim:

- Listopro

- packages

- nicotc (tu nombre de usuario Github)

- session-checker (nombre de tu paquete)

- src

Criar um arquivo compositor.json para seu pacote personalizado

Nesta seção, mostrarei como criar um arquivo composer.json para o seu pacote session-checker. Siga esses passos:

1) Abra seu terminal e navegue até a pasta.

Listopro/packages/nicotc/session-checker.

2) Execute o comando composer init. Este comando iniciará o assistente de criação de pacote. Composer e irá guiá-lo através do processo de criação do arquivo composer.json.

Lembre-se na pergunta minimum-stabilit:"stable".

3) Siga as instruções do assistente e forneça as informações necessárias sobre o seu pacote, como nome, descrição, autor, licença, versão, etc.

4) Depois de concluir o assistente, um arquivo será criado compona pasta Listopro/packages/nicotc/session-checker. Este arquivo conterá todas as informações que você forneceu durante o processo de criação.

5) Vamos aproveitar de uma vez e executar composer require illuminate/support.

Adicionar funcionalidade ao nosso pacote

Agora que criamos um arquivo composer.json para o nosso pacote session-checker, É hora de adicionar funcionalidade a ele. Conforme mencionado acima, nosso pacote verificará se um usuário está logado em outro navegador e exibirá uma mensagem se for o caso.

Para adicionar essa funcionalidade, primeiro precisamos criar uma classe que lide com a lógica do nosso pacote. Abra seu IDE preferido na pasta Listopro. A partir daí, navegue até a pasta packages/nicotc/session-checker/src.

Dentro da pasta /src, crie um novo arquivo chamado de SessionChecker.php.

Neste arquivo, criaremos uma classe chamada SessionChecker que irá gerenciar com a lógica do nosso pacote. Aqui está um exemplo de como essa classe pode ser:


Modificar o arquivo compositor.json para incluir a classe SessionChecker no carregamento automático do Composer

Nesta seção, mostramos como adicionar a classe SessionChecker que criamos antes do arquivo composer.json do nosso pacote session-checker. Ao fazer isso, permitimos Composer carregue automaticamente a classe em nosso aplicativo Laravel, sem precisar importá-la manualmente para cada arquivo.

1) Abra o arquivo composer.json na pasta raiz do seu projeto Laravel.

2) Adicione uma seção autoload como é mostrado a seguir:

Seu arquivo deverá ficar semelhante à imagem a seguir:


3) Execute o comando composer dump no seu terminal para atualizar o arquivo autoload.php do Composer.

Criar um laravel de teste


Vamos agora testar nosso pacote. Para fazer isso, criamos e configuramos nosso teste Laravel.

Abra seu terminal e navegue até a pasta Listopro. Uma vez nesta pasta, execute o seguinte para instalar o Laravel:

Acesse nosso projeto /laravel e execute:


Sua árvore de pastas deve ficar assim:


Abra o arquivo .env localizado na raiz do seu projeto Laravel, adicione a conexão ao banco de dados e altere SESSION_DRIVER=file por SESSION_DRIVER=database.

Agora execute:


Carregue nosso pacote no compositor

Em nosso editor vamos abrir o composer.json de Laravel e adicionamos:


Voltamos ao terminal e executamos:


Abra o arquivo \app\Http\Controllers\Auth\LoginController.php e adicione:


O nosso LoginController.php deveria ficar assim:

Teste do nosso pacote

Depois de carregarmos e registrarmos nosso pacote session-checker em nossa aplicação Laravel, é hora de testar sua funcionalidade.

Para isso, abra dois navegadores diferentes (por exemplo, Google Chrome e Firefox) e acesse sua aplicação Laravel em ambos. Faça login em um deles e depois no outro. Você verá uma notificação de que foi desconectado de um dos navegadores. Agora volte para o primeiro navegador e atualize a página. Você verá que será desconectado automaticamente.

Esta funcionalidade é possível graças à classe SessionChecker o que criamos em nosso pacote session-checker. A classe verifica quando um usuário efetua login e está logado em outro navegador e, caso esteja logado, efetua logout e permite novo login.

Publicar nosso pacote em packagist.org

Se você quiser compartilhar o pacote e assim contribuir com a comunidade de desenvolvimento PHP, você pode publicá-lo em packagist.org, um site onde você pode encontrar e baixar pacotes de código-fonte PHP, reutilizáveis ​​em diversos projetos.

Para publicar um pacote Laravel, a primeira coisa que precisamos é de uma conta no https://github.com/. Verifique se você não o possui ou faça login com um existente. Em seguida, gere um novo repositório com o mesmo nome do pacote do verificador de sessão. Feito isso, acesse seu pacote local no terminal:

/packages/nicotc/session-checker/

e execute:


Crie um arquivo .gitignore e adicione:


Em seguida, continue no console:

Entre agora em https://packagist.org/ e crie uma conta (ou faça login com uma existente). Pesquise no submit e cole a url do seu pacote aqui como na imagem:

Então exclua de composer.json do seu Laravel as seguintes linhas:


Execute:


E depóis:


Se o pacote já estiver carregando no packagist, Provavelmente mostrará um alerta como a imagem a seguir:


Para resolver o problema, clique no link connect it on you profile, Faça login na sua conta GitHub e pronto!

Criar um readme e uma licença


No Git você pode adicionar um readme no qual você pode especificar a forma como ele é instalado, como o pacote é utilizado e todos os dados que deseja colocar:

Aqui podemos criá-lo clicando no botão Add a README.
Você pode usar esta página para alguns exemplos:

https://www.makeareadme.com/

Então, no link a seguir você tem a licença que usaremos (MIT):

https://choosealicense.com/licenses/mit/#


Criamos um novo arquivo no GitHub e o chamaremos LICENSE.md.


Será o mesmo conteúdo do link anterior. Mudamos o ano e colocamos nosso nome.

Vamos novamente ao terminal do nosso pacote criado localmente:


E baixamos as alterações criadas em nosso GitHub:


Abrimos o arquivo composer.json localizado na raiz do nosso Laravel e adicionamos logo abaixo da linha de descrição:


Para finalizar, executamos os seguintes comandos:

Conclusão



Aprendemos como fazer um pacote no estilo “olá mundo”. Agora convido você a ampliar as funcionalidades do pacote session-checker, pois pode ser uma excelente oportunidade para aprimorar suas habilidades de programação e contribuir com a comunidade de desenvolvedores.

Existem muitas possibilidades que você pode explorar para adicionar novos recursos úteis ao pacote. Aqui estão algumas ideias:

  • Execute uma migração que adicione o campo deleted_at para a tabela de sessões que o Laravel cria. Da mesma forma, faça um modelo para que você possa usar o soft delete e assim as sessões não serão excluídas. A partir daqui, você define os limites da sua imaginação.
  • Crie um envio de notificações por e-mail.
  • Crie algumas rotas com seus respectivos controladores e visualizações, onde um usuário possa ver seu histórico de login.
  • Permita que um administrador desconecte um usuário do aplicativo.
  • Bloqueie usuários por meio de um campo adicional na tabela.

Você tem infinitas possibilidades para explorar.

Lembre-se que este é um primeiro nível de desenvolvimento e que você pode fazer pacotes tão simples como este ou com a complexidade que desejar ou exigir.

O desenvolvimento de pacotes no Laravel é uma ferramenta poderosa e flexível que nos permite criar soluções customizadas para nossas aplicações. A sua gestão pode ajudar-nos a melhorar a organização e modularidade do nosso código, o que por sua vez pode facilitar a manutenção e escalabilidade dos nossos projetos.

Deixo o link do repositorio GitHub e convido você a contribuir com este pequeno pacote.

Se você tiver alguma dúvida ou preocupação, pode entrar em contato comigo pelo LinkedIn.

Até logo!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.