LaravelのViewで値をフォーマットする方法

Laravel

Laravelで値のフォーマットを行う際、PHPのformat関数を使用すればいいかと考えていたのですが、調べてみたらもっと便利な方法がありました。

const.phpへ記述

例として、日付のフォーマットを行うことを想定します。

「created_at」「updated_at」に入っている値は以下画像のように「Y-m-d H:i:s」ですが、

この値をViewで表示する際は、「y/m/d」「y/m/d H:i:s」で表示させたい場合を想定します。

/config/const.phpに以下を記述します。

<?php

return [
  'format' => [
    'date' => 'y/m/d',
    'datetime' => 'y/m/d H:i:s',
  ]
],

Modelファイルの修正

Viewで取り回して使用する場合、PHP標準の関数を使用する際は問題ないのですが、Laravelで日付のフォーマットを行う際はModelファイルにある記述をしないとエラーが発生するため、app/Models/Hoge.phpへ追記します。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Hoge extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $table = 'hoge';

    protected $fillable = [
       〜略
       'created_at',
       'updated_at'
    ];

    // 追記
    protected $dates = [
       'created_at',
       'updated_at'
    ];
}

Viewで表示

表示の際は、foreachで取り出したものに対し、format関数内で第一引数にconfigを指定します。

引数の中身は以下の通りで、第一引数に定義したファイル名、第二、第三引数に定義したファイルに記述したキーを指定します。

@foreach($dates as $date)
    <span>{{ $date->created_at->format(config('const.format.date')) }}</span> // y/m/d形式
    <span>{{ $date->updated_at->format(config('const.format.datetime')) }}</span> // y/m/d H:i:s形式
@endforeach

定数ファイルで一元管理できるので、とても便利だなと思いました。

補足(応用)

また、日付以外のフォーマットも可能です。

例:statusカラムではint(2)で値を持っているが、View上ではステータス名で表示させたい場合(主に区分、ステータスなど)

・config/const.php

<?php

return [
  'stocks' => [
    'status' => [
      '0' => '在庫なし',
      '1' => '在庫あり',
      '2' => 'お取り寄せ',
    ]
  ]
],

・view

@foreach($stocks as $stock)
    <span>{{ config('const.stocks.status')[$stock->status] }}</span>
@endforeach
タイトルとURLをコピーしました