Cadre du générateur pour Laravel construit sur Laravel.
Sur Laravel 5.5:
composer require exfriend/laravel-recipeAfin de générer n'importe quelle entité, vous avez essentiellement besoin de deux choses: un modèle et les données réelles.
Recepe utilise la lame de Laravel comme moteur de modèle pour les talons, de sorte que l'utilisation de base est très similaire à la façon dont vous retournez les vues des contrôleurs.
Écrivons notre première recette qui générerait n'importe quelle classe.
resources/views/recipe :ressources / vues / recette / 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
}
Ensuite, partout dans votre code, vous pouvez exécuter:
$recipe = recipe()->usingView( 'recipes.class' )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Authenticatable',
'imports' => [
'IlluminateFoundationAuthUser as Authenticatable',
'IlluminateNotificationsNotifiable',
'LaravelPassportHasApiTokens',
],
'traits' => [
'HasApiTokens',
'Notifiable',
],
// 'implements' => [ 'SomeInterface', 'OtherInterface' ],
] );
Obtenez le code compilé:
dd ( $ recipe -> build () )Enregistrer dans le fichier:
$ recipe -> build ( app_path ( ' User.php ' ) );Créons maintenant une classe dédiée pour cette recette pour le faciliter.
app / recettes / 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 ' ;
}
Ici, vous pouvez remarquer que nous codons en dur le nom du modèle et définissons une nouvelle variable $props qui est quelque peu similaire à ce que Vue utilise dans ses composants.
Deux choses importantes se produisent ici:
Tout d'abord, nous avons ajouté une recette indiquant la validation que la propriété class est obligatoire dans cette recette. Vous pouvez définir la propriété Règles comme vous le feriez normalement dans votre application Laravel - c'est la même chose.
Deuxièmement, nous définissons les valeurs par défaut pour content et import . Ces valeurs par défaut seront appliquées si l'utilisateur ne fournit rien comme entrée.
Donc, notre utilisation qui en résulte ressemblera maintenant à ceci:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
' namespace ' => ' App ' ,
' class ' => ' User ' ,
' extends ' => ' IlluminateFoundationAuthUser ' ,
] )
-> build ( app_path ( ' User.php ' ) );Une note importante:
En raison des accessoires, les données réelles transmises à un modèle seront légèrement différentes de ce que nous avons passé. Par exemple, il aura content et imports . Parfois, vous souhaitez simplement obtenir les données transformées en compilant tout le modèle entier (par exemple pour les recettes imbriquées, voir ci-dessous). Pour obtenir uniquement les données compilées, exécutez:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
...
] )
-> buildData ();Étant donné que nous générons un modèle ici et que le modèle est quelque chose que nous aimerions générer souvent, il est logique de créer une recette de modèle dédiée basée sur une recette de classe générale que nous avons déjà. Faisons une recette de modèle simple:
App / Recipes / ModelRecipe.php
À venir.