laravel recipe
1.0.0
Laravel建立的Laravel的發電機框架。
在Laravel 5.5上:
composer require exfriend/laravel-recipe為了生成基本需要兩件事的任何實體:模板和實際數據。
食譜將Laravel的刀片用作存根的模板引擎,因此基本用法與您從控制器返回視圖的方式非常相似。
讓我們寫下將生成任何類的第一個食譜。
resources/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
}
然後,您可以在代碼中的任何地方運行:
$recipe = recipe()->usingView( 'recipes.class' )->with( [
'namespace' => 'App',
'class' => 'User',
'extends' => 'Authenticatable',
'imports' => [
'IlluminateFoundationAuthUser as Authenticatable',
'IlluminateNotificationsNotifiable',
'LaravelPassportHasApiTokens',
],
'traits' => [
'HasApiTokens',
'Notifiable',
],
// 'implements' => [ 'SomeInterface', 'OtherInterface' ],
] );
獲取編譯的代碼:
dd ( $ recipe -> build () )保存到文件:
$ recipe -> build ( app_path ( ' User.php ' ) );現在,讓我們為此食譜創建一個專門的類,以使其更容易。
app/食譜/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 ' ;
}
在這裡,您可以注意到,我們正在硬編碼模板名稱並定義一個新的$props變量,該變量與Vue在其組件中使用的變量有些相似。
這裡發生了兩個重要的事情:
首先,我們在此食譜中添加了一些驗證,告訴class是必不可少的。您可以像在Laravel應用程序中往常一樣設置規則屬性 - 這是同一回事。
其次,我們為content和import設置默認值。如果用戶不提供任何輸入,則將應用這些默認值。
因此,我們所產生的用法現在看起來像這樣:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
' namespace ' => ' App ' ,
' class ' => ' User ' ,
' extends ' => ' IlluminateFoundationAuthUser ' ,
] )
-> build ( app_path ( ' User.php ' ) );一個重要說明:
由於道具,傳遞給模板的實際數據將與我們傳遞的數據略有不同。例如,它將具有content和imports 。有時,您只想使用our編譯整個模板的轉換數據(例如,嵌套食譜,請參見下文)。要僅獲取編譯數據,請運行:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
...
] )
-> buildData ();由於我們在這裡生成一個模型,並且模型是我們要經常生成的東西,因此基於我們已經擁有的通用類食譜創建專用模型配方是有意義的。讓我們製作一個簡單的模型食譜:
應用/食譜/ModelRecipe.php
即將推出。