5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

laravel5でbladeのextensionを作成 + 曜日の表示

Posted at

最近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

こちらを参考にさせて頂き、以下のソースで上手く出力することが出来ました。

app/Providers/BladeServiceProvider.php
<?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内に

xxxxx.blade.php
@date_and_week($date)

YYYY/MM/DD(曜日)

と出力することが出来ます。

注意として、コンパイルされたファイルを一旦削除する必要があります。

php artisan clear-compiled

もしくは

storage/framework/views/ 内のファイルを削除

応用すれば日付の出力フォーマットを固定することも出来ると思います。
参考になればと思います。

また、こうした方がいいんじゃない?とかのアドバイスなどもあれば是非お願いします!

5
6
2

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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?