最近laravelで開発をすることになりまして、ちょうど5がリリースされたタイミングだったということもあり、laravel5でドキュメントや記事が少ない中色々と奮闘しております。
ちょっとでも参考になればと。
#bladeのextension + 曜日の出力
さて、、日付を出力する際に、色々と試行錯誤してしまったため、情報共有できればと思い始めて書きました!
例えばDBから抽出したものをそのまま表示しようとすると、
YYYY-MM-DD
YYYY-MM-DD HH:ii:ss
といった感じで出てしまうため、blade内では例えば
{!! date('Y/m/d', strtotime($user->date) !!}
といった記述が必要になるかと思います。
しかし、特に問題になったのが「曜日」の表示。
それを要件に出された時、一瞬頭が白くなりましたw
smartyには慣れていたので、どうにかしてbladeも拡張できないものかと。
色々と調べていた結果、ようやく見つけました。
php - Where to place Blade::extend - Stack Overflow
こちらを参考にさせて頂き、以下のソースで上手く出力することが出来ました。
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class BladeServiceProvider extends ServiceProvider {
public function boot()
{
\Blade::extend(function($view, $compiler)
{
$pattern = $compiler->createOpenMatcher('date_and_week');
$replace = '$1<?php \$week = array(\'日\', \'月\', \'火\', \'水\', \'木\', \'金\', \'土\'); echo date(\'Y/m/d\', strtotime$2)).\'(\'.\$week[date(\'w\', strtotime$2))].\')\'; ?>';
return preg_replace($pattern, $replace, $view);
});
}
public function register()
{}
}
ちょっと無理矢理感はありますが、blade内に
@date_and_week($date)
で
YYYY/MM/DD(曜日)
と出力することが出来ます。
注意として、コンパイルされたファイルを一旦削除する必要があります。
php artisan clear-compiled
もしくは
storage/framework/views/ 内のファイルを削除
応用すれば日付の出力フォーマットを固定することも出来ると思います。
参考になればと思います。
また、こうした方がいいんじゃない?とかのアドバイスなどもあれば是非お願いします!