Laravel 5.6でBlade ComponentのAlias機能を使ってみる



Laravel 5.6、 Bladeテンプレートの Componentに Alias(別名) を割り当てる方法の紹介です。

 2018年 2月7日に PHPのMVCフレームワーク Laravel バージョン5.6がリリースされ、EloquentモデルのDateキャスティング(dateフォーマットの変更)や、シングルサーバー・タスク・スケージューリングなどの機能が追加されましたが、Bladeテンプレートで ComponentのAlias (別名) が割り当てられるようになりました

Blade alias で出来ること 

- ファイルパスを省略して、コンポーネント名を Bladeシンタックスとして登録できるようになります

Bladeテンプレート上からコンポーネントの呼び出し比較


Blade Component用のaliasプロバイダーの作成

 alias を割り当てるには ' Blade ' クラスを使い、 " Blade::component('Bladeテンプレートのパス', '別名'); " という形で使用します。

 ' AppServiceProvider ' 内に記述すれば すぐに使うことができますが、管理し易いように ' AliasProvider ' というクラス名で、テンプレートの Alias専用のService Providerを作成しました。

# Alias用のサービスプロバイダーの作成
# app/Providers/Blade/AliasProvider.php
php artisan make:provider Blade/AliasProvider


 ServiceProvider を作成したら、 ' boot ' メソッド内に aliasをつける コンポーネントを定義します。

// app/Providers/Blade/AliasProvider.php
namespace App\Providers\Blade;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Blade; // Bladeクラスを呼び出し

class AliasProvider extends ServiceProvider
{
    public function boot()
    {
        // resources/view/partials/alert.blade.php を ' alert ' という名前で登録
        Blade::component('partials.alert', 'alert');
        // Blade::component('components.header', 'header');
    }

}
<!-- /resources/views/partials/alert.blade.php 
     * component用のViewファイル 
-->
<div class="alert alert-danger">
    {{ $message }}
</div>


ServiceProvider の処理を書け終えれば、 ' config/app.php ' の配列 ' providers ' 内にクラスを登録すれば準備は完了です。

// config/app.php
App\Providers\Blade\AliasProvider::class,


Bladeテンプレート上で alias を使う 

 ServiceProvider 内で alias を登録すれば、後は Bladeテンプレート上 登録した alias 名をカスタムタグとして呼び出すことができます。

// 3通りの呼び出し方が出来ます

// 呼び出し 1
@alert
  何かのアラートメッセージを表示
@endalert

// 呼び出し 2
@alert(['message' => '何かのアラートメッセージを表示'])
@endalert

// 呼び出し 3
@alert
  @slot('message') 
    何かのアラートメッセージを表示
  @endslot
@endalert

// 5.6以前の方法
@component('partials.alert')
  @slot('message') 
    何かのアラートメッセージを表示
  @endslot
@endcomponent


Summary

 alias(別名)を指定することで、テンプレート内でどのコンポーネントが使われているか よりわかりやすくなりました。また、一度サービスプロバイダー内でaliasを指定すると、テンプレートのパスを打つ必要が無くなるのも大きな特徴です。

// aliasを使って下記のようにコンポーネント名を明確にすれば、よりわかりやすくなりそうです

// ヘッダー
@header @endheader
  // メニュー
  @menu @endmenu
 // コンテンツ 
 @yield('content')
// フッター
@footer @endfooter

プロジェクトが大きくなって 分割された Viewファイルが多くなった時に使用すると 便利さが実感できそうです。

Laravel ( 5.6 ) : Blade

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ