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に以下を記述します。

1
2
3
4
5
6
7
8
<?php
 
return [
  'format' => [
    'date' => 'y/m/d',
    'datetime' => 'y/m/d H:i:s',
  ]
],

Modelファイルの修正

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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を指定します。

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

1
2
3
4
@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

1
2
3
4
5
6
7
8
9
10
11
<?php
 
return [
  'stocks' => [
    'status' => [
      '0' => '在庫なし',
      '1' => '在庫あり',
      '2' => 'お取り寄せ',
    ]
  ]
],

・view

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