LoginSignup
22
24

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-07-09

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テンプレートには無い機能で追加したいって機能がある場合は、
どんどん追加していってみてください!

22
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
24