Laravel 5.5 で Bladeテンプレートの カスタムif文を作成する紹介です。
Laravel 5.4 の Bladeテンプレートには ' @auth
' や ' @guest
' などの 値が true の場合にのみ処理を実行する Auth用タグが用意されていますが、5.5からは カスタムタグを簡単に作成できるメソッド、 ' Blade::if
' が加わりました。
- 値が true の時に実行する Blade用のカスタムタグが作成できる
{{-- 例: Bladeテンプレート用の @mytag を作成 --}}
@mytag($arg)
{{-- 値が true であれば処理 * この場合は 変数 $arg --}}
@endmytag
カスタムタグの作成は '' Illuminate\Support\Facades\Blade
" クラスを インポートし、 ' Blade::if
' メソッドを使えば作成できます。
クラスを呼び出し メソッド内に処理を書くだけなので、特にファイルの指定はありません。
use Illuminate\Support\Facades\Blade;
// Blade::if('タグ名', コールバック)
Blade::if('mytag', function ($arg) {
// 処理
});
実用的な例として、下のカスタムタグを作成してみました。プロジェクトの 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
以上がBladeテンプレートの カスタムif文の紹介でした。フロントエンドで使う場合は 最高権限者のみに何か表示さたり、HTMLメールのテンプレートで使うなど、色々と役に立つところがありそうです。
Laravel : Blade Templates