Generator -Framework für Laravel auf Laravel gebaut.
Auf Laravel 5.5:
composer require exfriend/laravel-recipeUm eine Entität zu generieren, benötigen Sie im Grunde zwei Dinge: eine Vorlage und die tatsächlichen Daten.
Rezept verwendet Laravels Blade als Vorlagemotor für Stubs, sodass die grundlegende Verwendung sehr ähnlich ist, wie Sie Ansichten von Controllern zurückgeben.
Schreiben wir unser erstes Rezept, das eine Klasse erzeugt.
resources/views/recipe :Ressourcen/Ansichten/Rezept/Klasse.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
}
Dann können Sie überall in Ihrem Code ausführen:
$recipe = recipe()->usingView( 'recipes.class' )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Authenticatable',
'imports' => [
'IlluminateFoundationAuthUser as Authenticatable',
'IlluminateNotificationsNotifiable',
'LaravelPassportHasApiTokens',
],
'traits' => [
'HasApiTokens',
'Notifiable',
],
// 'implements' => [ 'SomeInterface', 'OtherInterface' ],
] );
Holen Sie sich den kompilierten Code:
dd ( $ recipe -> build () )Speichern in Datei:
$ recipe -> build ( app_path ( ' User.php ' ) );Lassen Sie uns nun eine dedizierte Klasse für dieses Rezept erstellen, um es einfacher zu machen.
App/Rezepte/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 ' ;
}
Hier können Sie feststellen, dass wir den Vorlagennamen festkodieren und eine neue $props -Variable definieren, die dem, was Vue in seinen Komponenten verwendet, etwas ähnlich ist.
Hier passieren zwei wichtige Dinge:
Zunächst haben wir ein gewisses Validierungsrezept hinzugefügt, dass class in diesem Rezept obligatorisch ist. Sie können die Regeln -Eigenschaft so festlegen, wie Sie es normalerweise in Ihrer Laravel -Anwendung tun würden - das ist dasselbe.
Zweitens stellen wir Standardwerte für content und import ein. Diese Standardeinstellungen werden angewendet, wenn der Benutzer nichts als Eingabe angibt.
Unsere daraus resultierende Nutzung wird jetzt so aussehen:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
' namespace ' => ' App ' ,
' class ' => ' User ' ,
' extends ' => ' IlluminateFoundationAuthUser ' ,
] )
-> build ( app_path ( ' User.php ' ) );Ein wichtiger Hinweis:
Aufgrund von Requisiten unterscheiden sich die tatsächlichen Daten, die an eine Vorlage übergeben wurden, geringfügig von dem, was wir übergeben haben. Zum Beispiel haben sie content und imports . Manchmal möchten Sie nur die transformierten Daten mit dem Zusammenstellen der gesamten Vorlage erhalten (z. B. für verschachtelte Rezepte, siehe unten). Um nur die kompilierten Daten zu erhalten, rennen Sie:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
...
] )
-> buildData ();Da wir hier ein Modell generieren und ein Modell etwas ist, das wir oft generieren möchten, ist es sinnvoll, ein dediziertes Modellrezept zu erstellen, das auf einem allgemeinen Klassenrezept basiert, das wir bereits haben. Machen wir ein einfaches Modellrezept:
App/Rezepte/modelrecipe.php
Bald kommen.