はじめに

もちろん、ルートやコントローラーから直接HTMLドキュメントの文字列を返すのは実用的ではありません。幸いなことに、ビューはすべてのHTMLを別のファイルに配置する便利な方法を提供します。

ビューは、コントローラー/アプリケーションロジックをプレゼンテーションロジックから分離し、resources/viewsディレクトリに保存されます。Laravelを使用する場合、ビューのテンプレートは通常、Bladeテンプレート言語を使用して記述されます。シンプルなビューは次のようになります:

  1. <!-- View stored in resources/views/greeting.blade.php -->
  2. <html>
  3. <body>
  4. <h1>Hello, {{ $name }}</h1>
  5. </body>
  6. </html>

このビューはresources/views/greeting.blade.phpに保存されているため、グローバルviewヘルパーを使用して次のように返すことができます:

  1. Route::get('/', function () {
  2. return view('greeting', ['name' => 'James']);
  3. });

Bladeテンプレートの書き方についての詳細を探していますか?完全なBladeドキュメントをチェックして始めてください。

React / Vueでのビューの作成

多くの開発者は、Bladeを介してPHPでフロントエンドテンプレートを書くのではなく、ReactやVueを使用してテンプレートを書くことを好むようになりました。Laravelは、Inertiaというライブラリのおかげで、React / VueフロントエンドをLaravelバックエンドに簡単に結びつけることができ、SPAを構築する際の典型的な複雑さを回避できます。

私たちのBreezeとJetstreamのスターターキットは、Inertiaを利用した次のLaravelアプリケーションの素晴らしい出発点を提供します。さらに、Laravel Bootcampは、Inertiaを利用したLaravelアプリケーションの構築の完全なデモを提供し、VueとReactの例を含んでいます。

ビューの作成とレンダリング

.blade.php拡張子のファイルをアプリケーションのresources/viewsディレクトリに配置するか、make:view Artisanコマンドを使用してビューを作成できます:

  1. php artisan make:view greeting
  1. ビューを作成したら、グローバル`````view`````ヘルパーを使用してアプリケーションのルートまたはコントローラーの1つから返すことができます:
  2. ``````php
  3. Route::get('/', function () {
  4. return view('greeting', ['name' => 'James']);
  5. });
  6. `

ビューはViewファサードを使用しても返すことができます:

  1. use Illuminate\Support\Facades\View;
  2. return View::make('greeting', ['name' => 'James']);

ご覧のとおり、viewヘルパーに渡される最初の引数は、resources/viewsディレクトリ内のビューファイルの名前に対応します。2番目の引数は、ビューに利用可能にする必要があるデータの配列です。この場合、name変数を渡しており、これはBlade構文を使用してビュー内に表示されます。

ネストされたビューのディレクトリ

ビューはresources/viewsディレクトリのサブディレクトリ内にもネストできます。「ドット」表記を使用してネストされたビューを参照できます。たとえば、ビューがresources/views/admin/profile.blade.phpに保存されている場合、次のようにアプリケーションのルート/コントローラーの1つから返すことができます:

  1. return view('admin.profile', $data);

ビューのディレクトリ名には.文字を含めるべきではありません。

最初の利用可能なビューの作成

  1. ``````php
  2. use Illuminate\Support\Facades\View;
  3. return View::first(['custom.admin', 'admin'], $data);
  4. `

ビューが存在するかどうかの確認

ビューが存在するかどうかを確認する必要がある場合は、Viewファサードを使用できます。existsメソッドは、ビューが存在する場合trueを返します:

  1. use Illuminate\Support\Facades\View;
  2. if (View::exists('admin.profile')) {
  3. // ...
  4. }

ビューへのデータの渡し方

前の例で見たように、ビューにデータの配列を渡して、そのデータをビューで利用可能にすることができます:

  1. return view('greetings', ['name' => 'Victoria']);

この方法で情報を渡す場合、データはキー/値ペアの配列である必要があります。ビューにデータを提供した後、<?php echo $name; ?>のようにデータのキーを使用して、ビュー内の各値にアクセスできます。

  1. ``````php
  2. return view('greeting')
  3. ->with('name', 'Victoria')
  4. ->with('occupation', 'Astronaut');
  5. `

すべてのビューとデータを共有する

時折、アプリケーションによってレンダリングされるすべてのビューとデータを共有する必要があります。Viewファサードのshareメソッドを使用してこれを行うことができます。通常、shareメソッドへの呼び出しは、サービスプロバイダーのbootメソッド内に配置するべきです。App\Providers\AppServiceProviderクラスに追加するか、別のサービスプロバイダーを生成してそれらを格納することができます:

  1. <?php
  2. namespace App\Providers;
  3. use Illuminate\Support\Facades\View;
  4. class AppServiceProvider extends ServiceProvider
  5. {
  6. /**
  7. * Register any application services.
  8. */
  9. public function register(): void
  10. {
  11. // ...
  12. }
  13. /**
  14. * Bootstrap any application services.
  15. */
  16. public function boot(): void
  17. {
  18. View::share('key', 'value');
  19. }
  20. }

ビューコンポーザー

ビューコンポーザーは、ビューがレンダリングされるときに呼び出されるコールバックまたはクラスメソッドです。ビューがレンダリングされるたびにそのビューにバインドしたいデータがある場合、ビューコンポーザーはそのロジックを単一の場所に整理するのに役立ちます。ビューコンポーザーは、アプリケーション内の複数のルートやコントローラーによって同じビューが返され、常に特定のデータが必要な場合に特に便利です。

通常、ビューコンポーザーはアプリケーションのサービスプロバイダーの1つ内で登録されます。この例では、App\Providers\AppServiceProviderがこのロジックを保持すると仮定します。

  1. ``````php
  2. <?php
  3. namespace App\Providers;
  4. use App\View\Composers\ProfileComposer;
  5. use Illuminate\Support\Facades;
  6. use Illuminate\Support\ServiceProvider;
  7. use Illuminate\View\View;
  8. class AppServiceProvider extends ServiceProvider
  9. {
  10. /**
  11. * Register any application services.
  12. */
  13. public function register(): void
  14. {
  15. // ...
  16. }
  17. /**
  18. * Bootstrap any application services.
  19. */
  20. public function boot(): void
  21. {
  22. // Using class based composers...
  23. Facades\View::composer('profile', ProfileComposer::class);
  24. // Using closure based composers...
  25. Facades\View::composer('welcome', function (View $view) {
  26. // ...
  27. });
  28. Facades\View::composer('dashboard', function (View $view) {
  29. // ...
  30. });
  31. }
  32. }
  33. `

コンポーザーを登録したので、App\View\Composers\ProfileComposerクラスのcomposeメソッドは、profileビューがレンダリングされるたびに実行されます。コンポーザークラスの例を見てみましょう:

  1. <?php
  2. namespace App\View\Composers;
  3. use App\Repositories\UserRepository;
  4. use Illuminate\View\View;
  5. class ProfileComposer
  6. {
  7. /**
  8. * Create a new profile composer.
  9. */
  10. public function __construct(
  11. protected UserRepository $users,
  12. ) {}
  13. /**
  14. * Bind data to the view.
  15. */
  16. public function compose(View $view): void
  17. {
  18. $view->with('count', $this->users->count());
  19. }
  20. }

ご覧のとおり、すべてのビューコンポーザーはサービスコンテナを介して解決されるため、コンポーザーのコンストラクタ内で必要な依存関係をタイプヒントすることができます。

複数のビューにコンポーザーを添付する

  1. ``````php
  2. use App\Views\Composers\MultiComposer;
  3. use Illuminate\Support\Facades\View;
  4. View::composer(
  5. ['profile', 'dashboard'],
  6. MultiComposer::class
  7. );
  8. `
  1. ``````php
  2. use Illuminate\Support\Facades;
  3. use Illuminate\View\View;
  4. Facades\View::composer('*', function (View $view) {
  5. // ...
  6. });
  7. `

ビュークリエーター

ビュー「クリエーター」はビューコンポーザーに非常に似ていますが、ビューがインスタンス化された直後に実行され、ビューがレンダリングされるのを待ちません。ビュークリエーターを登録するには、creatorメソッドを使用します:

  1. use App\View\Creators\ProfileCreator;
  2. use Illuminate\Support\Facades\View;
  3. View::creator('profile', ProfileCreator::class);

ビューの最適化

デフォルトでは、Bladeテンプレートビューはオンデマンドでコンパイルされます。ビューをレンダリングするリクエストが実行されると、Laravelはコンパイルされたバージョンのビューが存在するかどうかを判断します。ファイルが存在する場合、Laravelは未コンパイルのビューがコンパイルされたビューよりも最近変更されているかどうかを判断します。コンパイルされたビューが存在しないか、未コンパイルのビューが変更されている場合、Laravelはビューを再コンパイルします。

リクエスト中にビューをコンパイルすると、パフォーマンスにわずかな悪影響を与える可能性があるため、Laravelはアプリケーションで使用されるすべてのビューを事前にコンパイルするためのview:cache Artisanコマンドを提供します。パフォーマンスを向上させるために、このコマンドをデプロイプロセスの一部として実行することをお勧めします:

  1. php artisan view:cache

ビューキャッシュをクリアするには、view:clearコマンドを使用できます:

  1. php artisan view:clear