Laravel 5.5 で Bladeテンプレートの カスタムif文を作成する紹介です。

 Laravel 5.4 の Bladeテンプレートには ' @auth ' や ' @guest ' などの 値が true の場合にのみ処理を実行する Auth用タグが用意されていますが、5.5からは カスタムタグを簡単に作成できるメソッド、 ' Blade::if ' が加わりました。
 

カスタムif文で出来ること

- 値が true の時に実行する Blade用のカスタムタグが作成できる

{{-- 例: Bladeテンプレート用の @mytag を作成 --}}
@mytag($arg)
{{-- 値が true であれば処理 * この場合は 変数 $arg --}}
@endmytag


カスタムBladeタグを作成

 カスタムタグの作成は '' Illuminate\Support\Facades\Blade  " クラスを インポートし、 ' Blade::if ' メソッドを使えば作成できます。
クラスを呼び出し メソッド内に処理を書くだけなので、特にファイルの指定はありません。

use Illuminate\Support\Facades\Blade;

// Blade::if('タグ名', コールバック)
Blade::if('mytag', function ($arg) {
 // 処理
}); 


Gitのブランチを判別するタグを作成する 

 実用的な例として、下のカスタムタグを作成してみました。プロジェクトの gitブランチが 指定したブランチと一致した時のみ 処理が実行されます。

@git('master')
{{-- gitのブランチが 'master' の時にのみ実行 --}}
@endgit


1. Service Providerの作成

 カスタムタグの処理を書く ファイルやディレクトリ指定はありませんが、独立したコンポーネントとして 管理し易いように、artisan コマンドを使って Service Providerを作成しました。
( * ここでは GitProvider を作成  )

# app/Providers/Blade/GitProvider.phpが作成されます
php artisan make:provider Blade/GitProvider


2. カスタムタグの処理

 上の artisan コマンドで作成した GitProvider の ' boot メソッド '  内に タグの定義、処理を書いていきます。この例では カスタムタグ ' @git ' を作成しています。
( * 自動生成されたファイルにregisterメッドが記述されていますが、今回必要ないので 削除しても問題ありません )

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

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

class GitProvider extends ServiceProvider
{
    public function boot()
    {
        // カスタムBladeタグ '@git'を作成
        // 引数にはブランチ名が入ります
        Blade::if('git', function ($branch) {
            // .git/HEADファイルがある場所
            $gitHead = base_path() . "/.git/HEAD";
            // HEADファイルが存在するかチェック
            $gitBranch = file_exists($gitHead);

            // HEADファイルが存在した場合の処理
            if ($gitBranch) {
                // .git/HEADファイルの内容を取得
                $content = file_get_contents($gitHead);
                // HEADファイル内の branchを取り出し
                $getBranch = trim(implode('/', array_slice(explode('/',
                                  $content ), 2)), "\n");
                // 引数のブランチ名が一致すればture、そうでなければfalseを返す
                return $branch === $getBranch ? true : false;
            }
            else {
                // gitがイニシャライズされていない場合はfalseを返す
                return false;
            }

        }); // ! Blade::if()

    } // ! boot()

} // ! Class::GitProvider


3. 作成した Provider の登録

 最後に、上の作成した GitProvider をconfig 内で登録すれば完了です。' config/app.php ' の 配列 ' providers ' 内に作成したファイルのクラスを登録します。

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


 これで下記のように ' @git ' タグが Bladeテンプレート内で使えるようになります。' Blade::if ' は名前付きの if 文のようなものなので、' elseif() '、' else ' 文も使うことが出来ます。

@git('master')
{{-- gitブランチが 'master' の時のみ実行 --}}
@endgit

{{-- else, elseif --}}
@git('master')
{{-- 'master' の時のみ実行 --}}
@elseif('develop')
{{-- ブランチが 'develop' の時のみ実行 --}}
@else
{{-- それ以外の時の処理 --}}
@endgit

 

Summary

 以上がBladeテンプレートの カスタムif文の紹介でした。フロントエンドで使う場合は 最高権限者のみに何か表示さたり、HTMLメールのテンプレートで使うなど、色々と役に立つところがありそうです。

Laravel : Blade Templates

 

この記事のカテゴリ

プログラミング

この記事のタグ

Laravel , PHP

Socialシェアボタン

スポンサーリンク