ホームページ > 記事 > PHPフレームワーク > Laravelビューコンポジター

私が Laravel を使った最初のバージョンは 4.2 でしたが、今でも大ファンです。もちろん、私は何年にもわたって多くのことを学び、多くの問題や困難に遭遇しましたが、Laravel で次にどのような変化が起こるのかを今でも楽しみにしています。
Laravel が提供する素晴らしい機能の 1 つはビュー拡張機能です。私の意見では、非常に強力なビュー拡張機能により、開発者は変数をグローバルからテンプレートに正確に渡すことができます。
ビュー拡張機能の使用方法?
まず、クラスベースとクロージャベースという 2 つの異なるタイプのビュー拡張機能を理解する必要があります。
<?php
View::composer('profile', function ($view) {
$view->with('user', ['...']);
});
// 或者
View::composer('profile', 'App\Http\ViewComposers\ProfileComposer');違いは明らかです。クロージャは使いやすく、セットアップに多くの労力を必要としませんが、サービス プロバイダー (Service Provider) がますます肥大化してしまいます。
一方、クラスベースのビュー拡張を使用すると、設計原則を直接分離できるようになります。もう 1 つの利点は、このコード部分を分離してテストでき、他の開発者が既存のコードをより簡単に保守できることです。
コンピューター サイエンスでは、関心の分離 (SoC) は、コンピューター プログラムを、機能の重複ができる限り少なくなった個別の機能に分割するプロセスです。懸念点とは、プログラム内の興味深い場所または焦点です。 。多くの場合、フォーカスは機能や動作と同義であり、SoC の進歩は従来、モジュール性とカプセル化による情報の隠蔽を利用して達成されてきました。
View::composer メソッドのパラメータについて理解する
この例では、View::composer メソッドに 2 つのパラメータがあることがわかります。
<?php
View::composer('profile', function ($view) {
$view->with('user', ['...']);
});
// 或者
View::composer('profile', 'App\Http\ViewComposers\ProfileComposer');最初のパラメータは監視するビューの名前で、文字列または配列にすることができます。つまり、このテンプレート ビューがレンダリングされると、ビュー マネージャーがトリガーされ、変数がビューに渡されます。
すべてのテンプレートを手動で選択する代わりに、ワイルドカードを使用することもできます。アスタリスク (*) を使用すると、多くのサブディレクトリを持つ複雑なテンプレートであっても、すべてのビューにデータを追加できます。
使用シナリオは通常、各ビューに表示する必要があるサイドバーまたはナビゲーション要素です。
<?php // 为一个视图添加合成器: ~/resources/views/profile View::composer('profile', ...); // 为多个视图添加: ~/resources/views/profile, ~/resources/views/profile_edit and ~/resources/views/profile_settings View::composer(['profile', 'profile_edit', 'profile_settings'], ...); // 目录通配符: all files in ~/resources/views/pages/* View::composer(['*pages.*'], ...);
2 番目のパラメータには、クロージャ関数またはビュー コンポーザのクラス名を指定できます。
どちらのメソッドも $view パラメータを受け取ります。このパラメータを通じて、メソッド ->with() を使用して、ビューに変数を追加したり、ビューから変数を追加したりすることが簡単にできます。
<?php
View::composer('*', function ($view) {
$view->with('breadcrumb', ['item 1', 'item ']);
});
// 或者
View::composer('*', 'App\Http\ViewComposers\NavigationComposer');
// compose 方法也有 $view 参数
namespace App\Http\View\Composers;
use Illuminate\View\View;
class NavigationComposer
{
/**
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('navigation', [
'items1', 'items2', 'item3'
]);
}
}ビューコンポジターのセットアップ
Laravel が多くのことにプロバイダーを使用していることはおそらくご存知でしょう。それで次に何が起こるか推測できますか?はい、サービス プロバイダーを登録する必要があります。プロバイダー内で、先ほど学習したビュー コンポジターを使用します。
ViewComposerServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer(
'pages/*', 'App\Http\View\Composers\NavigationComposer'
);
}
/**
* 注册服务提供者
*
* @return void
*/
public function register()
{
// TODO: 实现 register() 方法。
}
}あとは、~/config/app.php に新しいサービス プロバイダーを登録するだけです。
<?php
return [
'providers' => [
// ....
/*
* 应用的服务提供者...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\ViewComposerServiceProvider::class,
// ....
],
];これで、ビュー コンポジタをテストできるようになりました。
ビュー エディタをテストします
/detail というページがあるとします。このページは配列形式のナビゲーション データが必要です (下記)。
<?php
namespace App\Http\View\Composers;
use Illuminate\View\View;
class NavigationComposer
{
/**
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('navigation', [
'items1', 'items2', 'item3'
]);
}
}->assertViewHas(). メソッドを通じてビュー エディターをテストできます。このメソッドは、ビュー エディターが正しいビューをリッスンしているかどうかを検出し、それに $navigation 変数を渡すことができます。
<?php
class ViewComposerTest extends TestCase
{
/**
* @return void
*/
public function testDetailHasNavigationItems()
{
$this->get('/detail')->assertViewHas('navigation');
}
}このテストは簡単そうに見えますが、少なくともビュー エディターが機能するかどうかを知ることができます。
結論
クロージャ ベースまたはクラス ベースのビュー マネージャーを使用すると、コードが簡素化され、開発者が使いやすくなります。これも Laravel の一部です。このような強力なサービスを使用してみてはいかがでしょうか。
Laravel の新機能を楽しみにしています。何か新しいものをお見せできれば幸いです。
推奨チュートリアル: 「Laravel チュートリアル 」
以上がLaravelビューコンポジターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。