LaravelのBladeテンプレートを拡張する方法

More than 1 year has passed since last update.

smartyの{$smarty.now}みたいな形で現在日時を表示する方法はbladeには無いのかなーと思って、

調べてみるとなかったので作ってみましたー!


やり方

とりあえずプロジェクトディレクトリ内のどこかにファイルを作ります。

今回はblade_extensions.phpというファイル名で、appの直下に作成しましたー。

で、このファイルの中に拡張したい機能を書いていきます。

今回は和暦年・月・日をそれぞれ出力する機能が欲しかったので、それらについてツラツラ記述していきます。


拡張機能の実装

<?php

/*
* 現在日付の和暦を表示
*/

Blade::extend(function($view, $compiler)
{
$pattern = $compiler->createMatcher('now_y');

$now_year = date('Y');
$japanese_calender_year = $now_year - 1988;

return preg_replace($pattern, '<?php echo date("'.$japanese_calender_year.'") ?>', $view);
});

/*
* 現在日付の月を表示
*/

Blade::extend(function($view, $compiler)
{
$pattern = $compiler->createMatcher('now_m');
return preg_replace($pattern, '<?php echo date("n") ?>', $view);
});

/*
* 現在日付の日を表示
*/

Blade::extend(function($view, $compiler)
{
$pattern = $compiler->createMatcher('now_d');
return preg_replace($pattern, '<?php echo date("j") ?>', $view);
});

これで大まかな実装は終わりです!

実装自体はLaravelの公式にも書いてある通りで、createMatcherを使い拡張機能名を設定。

その後、その名前をどのようなPHPコードに置き換えるかを書いていってます。

なので、実装のテンプレートとしては以下の様な形になります。

Blade::extend(function($view, $compiler)

{
$pattern = $compiler->createMatcher('拡張機能名');
return preg_replace($pattern, '置き換えるPHPコード', $view);
});


blade_extensions.phpのパス指定

次に、app/start/global.phpを編集します。

単純に先ほど作成したblade_extensions.phpのパスを指定するだけです。

以下のコードをglobal.phpの好きなとこに追記してください。

require app_path().'/library/blade_extensions.php';


実際の使い方

これで使えるまでの基本的な設定類は終わりました!

あとは使うだけです。

使い方は使いたいbladeファイル内で以下のように書くだけです。

@now_y()

@now_m()
@now_d()

これで和暦年・月・日がそれぞれ表示されます。

他にもbladeテンプレートには無い機能で追加したいって機能がある場合は、

どんどん追加していってみてください!