PAKET INI TELAH DITINGGALKAN
Komponen tampilan adalah cara untuk membantu mengatur logika yang terkait dengan tampilan, mirip dengan komposer tampilan.
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 ' ] ) Komponen tampilan bisa berupa apa saja yang mengimplementasikan kontrak Htmlable Laravel, jadi Anda tidak perlu menggunakan tampilan Blade untuk merender komponen. Ini berguna untuk membungkus paket HTML pihak ketiga, seperti 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 ' ] )Keuntungan dibandingkan view composer adalah data dan logika rendering secara eksplisit diikat bersama dalam komponen, bukan dihubungkan setelahnya. Mereka juga memungkinkan Anda menggabungkan properti dan injeksi ketergantungan dengan lancar.
Paket ini didasarkan pada Memperkenalkan Komponen Tampilan di Laravel, sebuah alternatif dari View Composers oleh Jeff Ochoa.
Kami menginvestasikan banyak sumber daya untuk menciptakan paket sumber terbuka terbaik di kelasnya. Anda dapat mendukung kami dengan membeli salah satu produk berbayar kami.
Kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan. Anda akan menemukan alamat kami di halaman kontak kami. Kami mempublikasikan semua kartu pos yang diterima di dinding kartu pos virtual kami.
Anda dapat menginstal paket melalui composer:
composer require spatie/laravel-view-componentsTidak diperlukan pengaturan tambahan. Laravel secara otomatis akan menemukan dan mendaftarkan penyedia layanan.
Secara opsional, Anda dapat mempublikasikan file konfigurasi dengan:
php artisan vendor:publish --provider= " SpatieViewComponentsViewComponentsServiceProvider " --tag= " config " Ini adalah konten default file yang akan dipublikasikan di 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 Direktif @render Blade menerima dua argumen: yang pertama adalah jalur atau nama kelas komponen tampilan, yang kedua adalah kumpulan properti tambahan (opsional).
Anda dapat memilih antara mereferensikan komponen melalui jalur atau nama kelas.
@render ( ' myComponent ' )
@render ( App Http ViewComponents MyComponent :: class ) Parameter akan dimasukkan dalam metode komponen tampilan __construct . Komponen ini dipakai dengan container Laravel, sehingga parameter yang tidak disediakan oleh render akan dimasukkan secara otomatis.
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 ' ] ) Dalam contoh di atas, $color disetel secara eksplisit, dan objek $request akan dimasukkan oleh Laravel.
Dengan mengonfigurasi root_namespace , Anda dapat menentukan lokasi sebagian besar komponen tampilan Anda. Secara default, ini ada di AppHttpViewComponents .
app/
Http/
ViewComponents/
MyComponent.php
Nested/
NestedComponent.php
Komponen di atas dapat dirender dengan @render('myComponent') dan @render('nested.nestedComponent') .
Anda dapat mendaftarkan namespace tambahan di konfigurasi namespaces , mirip dengan jalur tampilan.
return [
' namespaces ' => [
' navigation ' => App Services Navigation::class,
],
]; app/
Services/
Navigation/
Menu.php
Komponen Menu di atas sekarang dapat dirender dengan @render('navigation::menu') .
composer testSilakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
Silakan lihat KONTRIBUSI untuk rinciannya.
Jika Anda menemukan masalah terkait keamanan, silakan kirim email ke [email protected] daripada menggunakan pelacak masalah.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.