แพ็คเกจนี้ถูกละทิ้งแล้ว
ส่วนประกอบมุมมองเป็นวิธีการหนึ่งที่ช่วยจัดระเบียบตรรกะที่เชื่อมโยงกับมุมมอง คล้ายกับผู้แต่งมุมมอง
namespace App Http ViewComponents ;
use Illuminate Http Request ;
use Illuminate Contracts Support Htmlable ;
class NavigationComponent implements Htmlable
{
/** IlluminateHttpRequest */
private $ request ;
/** @var string */
private $ backgroundColor ;
public function __construct ( Request $ request , string $ backgroundColor )
{
$ this -> request = $ request ;
$ this -> backgroundColor = $ backgroundColor ;
}
public function toHtml (): string
{
return view ( ' components.navigation ' , [
' activeUrl ' => $ this -> request -> url (),
' backgroundColor ' => $ this -> backgroundColor ,
]);
}
}
@render ( ' navigationComponent ' , [ ' backgroundColor ' => ' black ' ] )
องค์ประกอบมุมมองสามารถเป็นอะไรก็ได้ที่ใช้สัญญา Htmlable
ของ Laravel ดังนั้นคุณไม่จำเป็นต้องใช้มุมมอง Blade เพื่อเรนเดอร์ส่วนประกอบ สิ่งนี้มีประโยชน์สำหรับการห่อแพ็คเกจ HTML ของบุคคลที่สาม เช่น spatie/laravel-menu
namespace App Http ViewComponents ;
use Illuminate Contracts Support Htmlable ;
use Illuminate Contracts Auth Guard ;
use Spatie Menu Laravel Menu ;
class MainMenuComponent implements Htmlable
{
/** @var IlluminateContractsAuthGuard */
private $ guard ;
/** @var string */
private $ class ;
public function __construct ( Guard $ guard , string $ class = null )
{
$ this -> guard = $ guard ;
$ this -> class = $ class ;
}
public function toHtml (): string
{
$ menu = Menu:: new ()
-> addClass ( $ this -> class )
-> url ( ' / ' , ' Home ' )
-> url ( ' /projects ' , ' Projects ' );
if ( $ this -> guard -> check ()) {
$ menu -> url ( ' /admin ' , ' Adminland ' );
}
return $ menu ;
}
}
@render ( ' mainMenuComponent ' , [ ' class ' => ' background-green ' ] )
ข้อดีเหนือผู้แต่งมุมมองคือข้อมูลและลอจิกการเรนเดอร์เชื่อมโยงกันอย่างชัดเจนในส่วนประกอบต่างๆ แทนที่จะเชื่อมต่อกันในภายหลัง นอกจากนี้ยังช่วยให้คุณสามารถรวมคุณสมบัติและการฉีดขึ้นต่อกันได้อย่างราบรื่น
แพ็คเกจนี้อิงตาม Introcing View Components ใน Laravel ซึ่งเป็นทางเลือกแทน View Composers โดย Jeff Ochoa
เราลงทุนทรัพยากรจำนวนมากเพื่อสร้างแพ็คเกจโอเพ่นซอร์สที่ดีที่สุดในระดับเดียวกัน คุณสามารถสนับสนุนเราได้โดยการซื้อหนึ่งในผลิตภัณฑ์ที่ต้องชำระเงินของเรา
เราขอขอบคุณเป็นอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณถึงเรา โดยระบุว่าคุณใช้แพ็คเกจใดของเรา คุณจะพบที่อยู่ของเราในหน้าติดต่อของเรา เราเผยแพร่โปสการ์ดที่ได้รับทั้งหมดบนวอลล์โปสการ์ดเสมือนของเรา
คุณสามารถติดตั้งแพ็คเกจผ่านทางผู้แต่ง:
composer require spatie/laravel-view-components
ไม่จำเป็นต้องตั้งค่าเพิ่มเติม Laravel จะค้นหาและลงทะเบียนผู้ให้บริการโดยอัตโนมัติ
คุณสามารถเลือกเผยแพร่ไฟล์กำหนดค่าด้วย:
php artisan vendor:publish --provider= " SpatieViewComponentsViewComponentsServiceProvider " --tag= " config "
นี่คือเนื้อหาเริ่มต้นของไฟล์ที่จะเผยแพร่ที่ config/view-components
:
return [
/*
* The root namespace where components reside. Components can be referenced
* with camelCase & dot notation.
*
* Example: 'root_namespace' => AppHttpViewComponents::class
*
* `@render('myComponent')
* => `AppHttpViewComponentsMyComponent`
*/
' root_namespace ' => ' AppHttpViewComponents ' ,
/*
* Register alternative namespaces here, similar to custom view paths.
*
* Example: 'navigation' => AppServicesNavigation::class,
*
* `@render('navigation::mainMenu')`
* => `AppServicesNavigationMainMenu`
*/
' namespaces ' => [
// 'navigation' => AppServicesNavigation::class,
],
];
@render
คำสั่ง @render
Blade ยอมรับสองอาร์กิวเมนต์ ข้อแรกคือพาธหรือชื่อคลาสของคอมโพเนนต์มุมมอง ส่วนข้อที่สองคือชุดคุณสมบัติเพิ่มเติม (เป็นทางเลือก)
คุณสามารถเลือกระหว่างการอ้างอิงส่วนประกอบผ่านเส้นทางหรือชื่อคลาส
@render ( ' myComponent ' )
@render ( App Http ViewComponents MyComponent :: class )
พารามิเตอร์จะถูกฉีดเข้าไปในองค์ประกอบมุมมอง __construct
วิธีการ ส่วนประกอบถูกสร้างอินสแตนซ์ด้วยคอนเทนเนอร์ของ Laravel ดังนั้นพารามิเตอร์ที่ไม่ได้มาจากการเรนเดอร์จะถูกแทรกโดยอัตโนมัติ
use Illuminate Http Request ;
class MyComponent implements Htmlable
{
public function __construct ( Request $ request , string $ color )
{
$ this -> request = $ request ;
$ this -> color = $ color ;
}
// ...
}
@render ( ' myComponent ' , [ ' color ' => ' red ' ] )
ในตัวอย่างข้างต้น $color
ถูกกำหนดไว้อย่างชัดเจน และ $request
object จะถูกฉีดโดย Laravel
ด้วยการกำหนดค่า root_namespace
คุณสามารถกำหนดตำแหน่งของส่วนประกอบมุมมองจำนวนมากได้ ตามค่าเริ่มต้น จะอยู่ใน AppHttpViewComponents
app/
Http/
ViewComponents/
MyComponent.php
Nested/
NestedComponent.php
ส่วนประกอบข้างต้นสามารถแสดงผลด้วย @render('myComponent')
และ @render('nested.nestedComponent')
คุณสามารถลงทะเบียนเนมสเปซเพิ่มเติมได้ในการกำหนดค่า namespaces
ซึ่งคล้ายกับเส้นทางการดู
return [
' namespaces ' => [
' navigation ' => App Services Navigation::class,
],
];
app/
Services/
Navigation/
Menu.php
ส่วนประกอบ Menu
ด้านบนสามารถแสดงผลด้วย @render('navigation::menu')
ได้แล้ว
composer test
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เปลี่ยนแปลงเมื่อเร็วๆ นี้
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
หากคุณพบปัญหาที่เกี่ยวข้องกับความปลอดภัย โปรดส่งอีเมลถึง [email protected] แทนการใช้ตัวติดตามปัญหา
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม