Estrutura do gerador para Laravel construído sobre o Laravel.
No Laravel 5.5:
composer require exfriend/laravel-recipePara gerar qualquer entidade, você basicamente precisa de duas coisas: um modelo e os dados reais.
A receita usa a lâmina de Laravel como um mecanismo de modelo para stubs, portanto o uso básico é muito semelhante à maneira como você retorna as visualizações dos controladores.
Vamos escrever nossa primeira receita que geraria qualquer classe.
resources/views/recipe :Recursos/Views/Recipe/Class.blade.php
{!! ' < ' . ' ?php ' ! !}
@unless ( empty ( $namespace ) )
namespace {{ $namespace } } ;
@endunless
@unless ( empty ( $imports ) )
@foreach ( $imports as $import )
import {{ $import } } ;
@endforeach
@endunless
class {{ $class } } {{ isset ( $extends ) ? ' extends ' . $extends : ' ' } } {{ ! empty ( $implements ) ? ' implements ' . collect ( $implements ) -> implode ( ' , ' ) : ' ' } }
{
@unless ( empty ( $traits ) )
use {{ collect ( $traits ) -> implode ( ' , ' ) } } ;
@endunless
@isset ( $content )
{!! $content ! !}
@endisset
}
Então, em qualquer lugar do seu código, você pode executar:
$recipe = recipe()->usingView( 'recipes.class' )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Authenticatable',
'imports' => [
'IlluminateFoundationAuthUser as Authenticatable',
'IlluminateNotificationsNotifiable',
'LaravelPassportHasApiTokens',
],
'traits' => [
'HasApiTokens',
'Notifiable',
],
// 'implements' => [ 'SomeInterface', 'OtherInterface' ],
] );
Obtenha o código compilado:
dd ( $ recipe -> build () )Salvar no arquivo:
$ recipe -> build ( app_path ( ' User.php ' ) );Agora, vamos criar uma classe dedicada para esta receita para facilitar.
App/Receitas/ClassRecipe.php
<?php
namespace App Recipes ;
class ClassRecipe extends Exfriend Recipe Recipe
{
public $ props = [
' class ' => [
' rules ' => ' required ' ,
],
' content ' => [ ' default ' => '' , ],
' imports ' => [ ' default ' => [], ],
];
protected $ view_name = ' recipes.class ' ;
}
Aqui você pode observar que estamos codificando o nome do modelo e definindo uma nova variável $props que é um pouco semelhante ao que Vue usa em seus componentes.
Duas coisas importantes acontecem aqui:
Primeiro, adicionamos alguma receita de validação informando que a propriedade class é obrigatória nesta receita. Você pode definir a propriedade das regras como normalmente faria em seu aplicativo Laravel - isso é a mesma coisa.
Segundo, estamos definindo valores padrão para content e import . Esses padrões serão aplicados se o usuário não fornecer nada como entrada.
Então, nosso uso resultante agora ficará assim:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
' namespace ' => ' App ' ,
' class ' => ' User ' ,
' extends ' => ' IlluminateFoundationAuthUser ' ,
] )
-> build ( app_path ( ' User.php ' ) );Uma nota importante:
Devido aos adereços, os dados reais passados para um modelo serão ligeiramente diferentes do que passamos. Por exemplo, eles terão content e imports . Às vezes, você gostaria de obter os dados transformados com nosso modelo inteiro (por exemplo, para receitas aninhadas, veja abaixo). Para obter apenas os dados compilados, execute:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
...
] )
-> buildData ();Como estamos gerando um modelo aqui e o modelo é algo que gostaríamos de gerar com frequência, faz sentido criar uma receita de modelo dedicada com base em uma receita de classe geral que já temos. Vamos fazer uma receita de modelo simples:
App/Receitas/Modelrecipe.php
Em breve.