إطار المولد لارافيل المبني على لارافيل.
على 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 ' ) );الآن دعنا ننشئ فئة مخصصة لهذه الوصفة لتسهيل الأمر.
التطبيق/الوصفات/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 . في بعض الأحيان ، تود فقط الحصول على البيانات المحولة مع تجميع القالب بأكمله (مثل الوصفات المتداخلة ، انظر أدناه). للحصول على البيانات المترجمة فقط ، قم بتشغيل:
$ recipe = ( App Recipes ClassRecipe::class )-> with ( [
...
] )
-> buildData ();نظرًا لأننا ننشئ نموذجًا هنا والنموذج هو شيء نود إنشاءه في كثير من الأحيان ، فمن المنطقي إنشاء وصفة نموذجية مخصصة تستند إلى وصفة فئة عامة لدينا بالفعل. لنجعل وصفة نموذجية بسيطة:
التطبيق/الوصفات/modelRecipe.php
قريباً.