Marco de generador para Laravel construido sobre Laravel.
En Laravel 5.5:
composer require exfriend/laravel-recipePara generar cualquier entidad, básicamente necesita dos cosas: una plantilla y los datos reales.
La receta utiliza la cuchilla de Laravel como motor de plantilla para Stubs, por lo que el uso básico es muy similar a la forma en que devuelve las vistas de los controladores.
Escribamos nuestra primera receta que generaría cualquier clase.
resources/views/recipe :recursos/vistas/receta/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
}
Luego, en cualquier lugar de su código, puede ejecutar:
$recipe = recipe()->usingView( 'recipes.class' )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Authenticatable',
'imports' => [
'IlluminateFoundationAuthUser as Authenticatable',
'IlluminateNotificationsNotifiable',
'LaravelPassportHasApiTokens',
],
'traits' => [
'HasApiTokens',
'Notifiable',
],
// 'implements' => [ 'SomeInterface', 'OtherInterface' ],
] );
Obtenga el código compilado:
dd ( $ recipe -> build () )Guardar en el archivo:
$ recipe -> build ( app_path ( ' User.php ' ) );Ahora creemos una clase dedicada para esta receta para que sea más fácil.
aplicación/recetas/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 ' ;
}
Aquí puede notar que estamos codificando el nombre de la plantilla y definiendo una nueva variable $props que es algo similar a lo que Vue usa en sus componentes.
Dos cosas importantes suceden aquí:
Primero, agregamos algunas recetas de validación que la propiedad class es obligatoria en esta receta. Puede establecer la propiedad de reglas como lo haría normalmente en su aplicación Laravel, eso es lo mismo.
En segundo lugar, estamos configurando valores predeterminados para content e import . Esos valores predeterminados se aplicarán si el usuario no proporciona nada como la entrada.
Entonces, nuestro uso resultante ahora se verá así:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
' namespace ' => ' App ' ,
' class ' => ' User ' ,
' extends ' => ' IlluminateFoundationAuthUser ' ,
] )
-> build ( app_path ( ' User.php ' ) );Una nota importante:
Debido a los accesorios, los datos reales pasados a una plantilla serán ligeramente diferentes de lo que pasamos. Por ejemplo, tendrá content e imports . A veces le gustaría obtener los datos transformados con la compilación de toda la plantilla (por ejemplo, para recetas anidadas, ver más abajo). Para obtener solo los datos compilados, ejecute:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
...
] )
-> buildData ();Dado que estamos generando un modelo aquí y el modelo es algo que nos gustaría generar a menudo, tiene sentido crear una receta de modelo dedicada basada en una receta de clase general que ya tenemos. Hagamos una receta modelo simple:
aplicación/recetas/modeleRecipe.php
Muy pronto.