Laravel — Admin generator com InfyOm

Laravel é o framework Php mais utilizado no mercado atualmente. Abaixo um gráfico comparativo dos frameworks pesquisados no google:

Comparação Frameworks PHP google Trends

Dentre as funcionalidades mais utilizadas no dia a dia, principalmente para as pequenas aplicações, está a necessidade de gerarmos a administração CRUD básica das entidades da aplicação, bem como expor em formato API as mesmas operações de CRUD. O intuito desse post é apresentar o InfyOm para a geração de uma administração CRUD + API no Laravel Framework.

Os pré-requisitos são:
 PHP 5.6.4+
 Composer PHP instalado

1 — Para iniciar, vamos utilizar uma nova aplicação laravel. No meu caso, estou usando como nome da aplicação “admin_laravel”:

composer create-project --prefer-dist laravel/laravel admin_laravel "5.4.*"

Depois de criado você deve ter uma estrutura de arquivos semelhante a esta:

2 — O próximo passo é adicionar os pacotes necessários para o InfyOm no arquivo composer.json

"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"infyomlabs/laravel-generator": "5.4.x-dev",
"laravelcollective/html": "^5.4.0",
"infyomlabs/adminlte-templates": "5.4.x-dev",
"infyomlabs/swagger-generator": "dev-master",
"jlapp/swaggervel": "dev-master",
"doctrine/dbal": "~2.3"
},

Logo em seguida, executar dentro do diretório do projeto o composer update para atualizar os novos pacotes:

composer update

3 — Como estamos usando a versão 5.4.x do Laravel, ainda precisamos registrar os novos providers (na versão 5.5.x não é necessário). Precisamos alterar o arquivo config/app.php e adicionar no array de providers as linhas abaixo:

Collective\Html\HtmlServiceProvider::class,
Laracasts\Flash\FlashServiceProvider::class,
Prettus\Repository\Providers\RepositoryServiceProvider::class,
\InfyOm\Generator\InfyOmGeneratorServiceProvider::class,
\InfyOm\AdminLTETemplates\AdminLTETemplatesServiceProvider::class,

Abaixo o array de providers após a adição das linhas:

Alterações na IDE

Precisamos também adicionar os Alias dentro do mesmo arquivo config/app.php no array de alias (os alias serão utilizados nas views geradas pelo InfyOm):

'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
'Flash' => Laracasts\Flash\Flash::class,

Obs: Nessa etapa do processo autorizar a sobrescrever o arquivo de rotas atual.

4 — Para finalizar a instalação do InfyOm vamos alterar o mapeamento de rotas padrão para a API. Vamos alterar o método mapApiRoutes no arquivo app/Providers/RouteServiceProvider.php:

Route::prefix('api')
->middleware('api')
->as('api.')
->namespace($this->namespace."\\API")
->group(base_path('routes/api.php'));

5 — Executaremos um publish pra finalizar a instalação do InfyOm e gerar os arquivos base necessários:

php artisan infyom:publish
php artisan vendor:publish
php artisan infyom.publish:layout

Note que ao executar o publish acima, são gerados arquivos base como:
 app/Http/Controllers/Auth
 app/Http/Controllers/AppBaseController.php

Até aqui foram vários steps de configuração, e é importante saber tudo que foi alterado. Porém, o InfyOm facilitou essa configuração fazendo um fork do laravel 5.4 já com suas configurações realizadas. Todos os passos acima podem ser substituídos por clonar esse git (https://github.com/InfyOmLabs/adminlte-generator.git) e executar um composer install. \o

6 — Vamos começar a gerar as coisas magicamente agora :). Começamos por aplicar uma config no laravel para que scripts de execução com keys/indices mais longos não deem problema. Vamos acrescentar um using e uma config no método boot em app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}

Na sequência podemos executar o migrate. Assim, as tabelas necessárias para a autenticação padrão do InfyOm já serão criadas na base de dados. Baixe esses dois migrates (User e Passwords) necessários e salve no diretório database/migrations.
 Obs: Os dados de acesso para o BD precisam estar corretamente configurados no arquivo .env, localizado na raiz do projeto.

php artisan migrate

Nosso projeto já pode ser acessado. Considerando nosso ambiente de desenvolvimento podemos usar o artisan para webserver local:

php artisan serve

7 — Criaremos nossa própria tabela agora:

CREATE TABLE customer
(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(250) NOT NULL,
country VARCHAR(20),
address VARCHAR(300),
created_at TIMESTAMP,
updated_at TIMESTAMP
)

8 — Agora geramos o admin referente a customers

php artisan infyom:scaffold Customer --fromTable --tableName=customer

Nessa etapa é gerado Model, Controllers e Views automagicamente.
 Para efeitos de testes, vamos desabilitar a opção de softdelete que vem padrão, para isso, comentar a diretiva use SoftDeletes; em app/Models/Customer.php

O CRUD para Customer está pronto para uso:

9 — Para finalizar, geramos a API referente a customer

php artisan infyom:api Customer --fromTable --tableName=customer
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.