Criando Packages com migrations no Laravel 5

Flávio H. Ferreira
4 min readMar 30, 2016

--

Tentando participar um pouco mais da comunidade Laravel Brasil e PHP, estou respondendo a esta solicitação: https://github.com/artesaos/content-request/issues/16 (Responda alguma ou faça sua solicitação) com este tutorial de como realizar a montagem de um package para Laravel com migrations inclusas.

Primeira etapa, vamos iniciar um projeto Laravel com o seguinte comando:

composer create-project laravel/laravel — prefer-dist ./package-app

Após a criação do projeto acesse a pasta “package-app” e crie em seu diretório root uma pasta com o nome “packages”, esta pasta abrigará a estrutura de seu pacote. Agora acesse esta pasta packages e crie pastas na seguinte estrutura [Vendor Name]/[Package Name], no meu caso utilizei fhferreira/tags, acessando a pasta criada adicione mais um diretório “src” este será o responsável por armazenar nossos arquivos do pacote.

Sua estrutura ficará assim:

Agora acesse o diretório packages/fhferreira/tags/ via terminal e realize o seguinte comando:

composer init

Responda as perguntas que serão exibidas na sequência e será criado no mesmo nível de sua pasta “src” um arquivo composer.json

O conteúdo do arquivo será similar ao conteúdo abaixo:

Adicione também o trecho a seguir para que o pacote seja carregado via autoload seguindo a PSR-4:

Pronto, agora temos a estrutura inicial do nosso package, vamos ao código:

Primeiramente vamos criar nosso service provider:

php artisan make:provider TagsServiceProvider

Após o comando, mova o arquivo para a pasta packages/fhferreira/tags/src

Repare que no método boot temos a ação que será executada na primeira vez que o módulo for publicado.

A Linha:
$this->loadViewsFrom …
Possibilita que você utilize uma view diretamente dentro do pacote, pra que não seja necessário copiá-las para a pasta “resource/views” no nosso exemplo eu poderia realizar a exibição de uma view diretamente dentro do pacote utilizando o seguinte comando:

return view(“tags::index”);

Os comandos:

$this->publishes

realizam a replicação dos arquivos contidos nas pastas definidas do pacote para as pastas especificas do projeto, no nosso provider foram definidas as pastas: Views e Migrations

Quando utilizamos este modelo de registro no service provider, é necessário realizar o comando php artisan vendor:publish para que os arquivos sejam copiados para as pastas do projeto e caso existam migrations realizar o php artisan migrate a seguir.

No nosso método register() realizamos o registro das Classes e arquivos necessários para o funcionamento do nosso package. No exemplo realizei a inclusão do arquivo “routes.php” e a instanciação de nosso controller de exemplo “TagsController.php”

A seguir você irá visualizar o restante dos arquivos criados e o passo necessário para inserir o “TagsServiceProvider.php” na aplicação.

routes.php

TagsController.php

Tag.php

Migration 2016_03_30_000000_create_tags_table.php > CreateTagsTable

Sendo assim sua estrutura final do pacote será essa:

Após todos os arquivos estarem prontos o último passo é adicionar ao arquivo config/app.php na propriedade “providers” o nosso Service Provider.

Fhferreira\Tags\TagsServiceProvider::class,

E rodar o comando antes comentado “php artisan vendor:publish

O post ficou muito grande, mas espero que seja suficientemente claro para retirar as dúvidas quanto a criação de um package com migrations.

Código-fonte: https://github.com/fhferreira/tags

Para publicar seu pacote e deixá-lo disponível para instalação diretamente via composer vá até o https://packagist.org/ e registre seu package.

Fonte: http://laraveldaily.com/how-to-create-a-laravel-5-package-in-10-easy-steps/

--

--

Responses (4)