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