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-components
Tidak 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 test
Silakan 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.