このパッケージは放棄されました
ビュー コンポーネントは、ビュー コンポーザと同様に、ビューに関連付けられたロジックを整理するのに役立つ方法です。
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 ' ] )
ビューコンポーネントは、Laravel のHtmlable
コントラクトを実装するものであれば何でもよいため、コンポーネントをレンダリングするために必ずしも Blade ビューを使用する必要はありません。これは、spatie/laravel-menu などのサードパーティの HTML パッケージをラップする場合に便利です。
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 ' ] )
ビュー コンポーザーと比較した利点は、データとレンダリング ロジックが後から接続されるのではなく、コンポーネント内で明示的に結合されることです。また、プロパティと依存関係の注入をシームレスに組み合わせることができます。
このパッケージは、Jeff Ochoa による View Composers の代替となる Laravel での View コンポーネントの導入に基づいています。
私たちはクラス最高のオープンソース パッケージの作成に多くのリソースを投資しています。有料製品のいずれかを購入することで、私たちをサポートできます。
当社のどのパッケージを使用しているかについて、故郷から葉書を送っていただき、誠にありがとうございます。当社の住所は、お問い合わせページに記載されています。受け取ったすべてのポストカードをバーチャル ポストカード ウォールに公開します。
パッケージは、composer 経由でインストールできます。
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 ディレクティブは 2 つの引数を受け入れます。1 つ目はビュー コンポーネントのパスまたはクラス名で、2 つ目は追加のプロパティ セット (オプション) です。
コンポーネントをパス経由で参照するか、クラス名経由で参照するかを選択できます。
@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
オブジェクトが 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 ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。