Laravel 5.6、 Bladeテンプレートの Componentに Alias(別名) を割り当てる方法の紹介です。
2018年 2月7日に PHPのMVCフレームワーク Laravel バージョン5.6がリリースされ、EloquentモデルのDateキャスティング(dateフォーマットの変更)や、シングルサーバー・タスク・スケージューリングなどの機能が追加されましたが、Bladeテンプレートで ComponentのAlias (別名) が割り当てられるようになりました。
- ファイルパスを省略して、コンポーネント名を Bladeシンタックスとして登録できるようになります

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,
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
alias(別名)を指定することで、テンプレート内でどのコンポーネントが使われているか よりわかりやすくなりました。また、一度サービスプロバイダー内でaliasを指定すると、テンプレートのパスを打つ必要が無くなるのも大きな特徴です。
// aliasを使って下記のようにコンポーネント名を明確にすれば、よりわかりやすくなりそうです
// ヘッダー
@header @endheader
// メニュー
@menu @endmenu
// コンテンツ
@yield('content')
// フッター
@footer @endfooter
プロジェクトが大きくなって 分割された Viewファイルが多くなった時に使用すると 便利さが実感できそうです。
Laravel ( 5.6 ) : Blade