Criando Packages com migrations no Laravel 5
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/