เฟรมเวิร์กเครื่องกำเนิดไฟฟ้าสำหรับ 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 ' ) );ตอนนี้เรามาสร้างคลาสเฉพาะสำหรับสูตรนี้เพื่อให้ง่ายขึ้น
แอพ/สูตร/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
เร็วๆ นี้.