LoginSignup
16
13

More than 1 year has passed since last update.

Laravelで定数を使う場合のパターン

Posted at

概要

Laravelを使っている案件をいくつか経験し、定数の使い方を色々列挙していく

①config配下を使う

configディレクトリ以下に定数用のファイルを作成して、configメソッドで呼び出す
envファイルと組み合わせて環境に応じて変わるような値を設定するのによく使われている印象
image.png

問い合わせフォーム経由で連絡があった場合に管理者へ送信する時の管理者のメールアドレスを定義しておく
ローカルや本番などで指定するアドレスが違うことが多いので、よくあるパターンだと思う

例えば、config配下にemailaddress.phpような名前でファイルを作る

config/emailaddress.php
<?php

return [
    'mail_admin'   => env('MAIL_ADMIN', 'admin@example.com'),
];

.envファイルにも定義しておく

.env
MAIL_ADMIN=hoge@gmail.com

呼び出す場合はconfigメソッドを使う

TestController.php
public function index ()
{
   $address = config('emailaddress.mail_admin');
   var_dump( $address );
}

# .envに定義されている場合は、.envで設定された値が出力される
# =>  hoge@gmail.com

# .envに定義されていない場合はデフォルト値が出力される
# =>  admin@example.com

②Modelファイルを使う

Model内にconstなどで定義しておく
システム全体というより、そのModelに関係する内容だけ記載されている印象
image.png

ECサイトなどで会員ステータスがある場合にデータベースに保存されるステータスの値を定義する場合など

User.php
class User
{
    const STATUS = [
        0 => '仮会員',
        1 => '本会員',
        2 => 'VIP会員',
    ];
}

呼び出す場合は、ダブルコロン::(スコープ定義演算子)で呼び出す

TestController.php
use App\Models\User;

class TestController extends Controller
{
  public function index ()
  {
     $now_status = User::STATUS[0];
     var_dump( $now_status );
  }
}

# => 仮会員  

③定数用のディレクトリを作る

app配下などにConstsなど定数用に好きなディレクトリ名を作って定数ファイルを置く。
システム全体で使う場合の定数を管理する際に使われる印象。結構よくみるやり方。
image.png

都道府県など定数としてセットしておく。
config配下で作成してもよいが、以下のような書き方をして、ダブルコロン::(スコープ定義演算子)で呼び出せるようにするとVSコードなどIDEで補完してくれたり、viewで値に対して名称を表示させる時などに使いやすい。

app/Consts/PrefectureConst.php
<?php
namespace App\Consts;

class PrefectureConst
{
    const LIST = [
        '1' =>['name' => '北海道', 'en' => 'hokkaido'],
        '2' =>['name' => '青森', 'en' => 'aomori'],
        // 中略 //
                '47'=>['name' => '沖縄県', 'en' => 'okinawa']
    ]
}

呼び出す場合は、ダブルコロン::(スコープ定義演算子)で呼び出す

TestController.php
use App\Consts\PrefectureConst;

class TestController extends Controller
{
  public function index ()
  {
     $pref_name = PrefectureConst::LIST[2]['name'];
     var_dump( $pref_name );
  }
}

// => 青森  

④言語ファイルを使う

Laravelでは多言語対応するようにlangディレクトリ配下のファイルを使って、利用する言語によってシステム内で文字を変換してくれる機能がある。
定数として使うのは少し意味が異なるが、システム内の言葉の定義をここで利用している案件もあった。
image.png

・何かしらアラートを出す場合の文言を統一する
・ページの呼称を統一する(TOPなのかトップなのか)

例えば、デフォルトだとlang配下にlabel.phpのような名前のファイルを作成する

lang/ja/label.php
<?php

return [
    'alert' => [
        'delete'   => '削除すると元に戻せません。実行する場合は、はいをクリックしてください',
        'submit'   => '送信します。実行する場合は、はいをクリックしてください',
    ],

    'page' => [
        'top'      => 'TOPページ',
        'index'    => '一覧ページ',
        'detail'   => '詳細ページ',
    ],
];

呼び出す場合は、transメソッドを使う

welcome.blade.php

<p>{{ trans('label.alert.delete') }}</p>

// => 削除すると元に戻せません。実行する場合は、はいをクリックしてください  

※表示されない場合はconfigのapp.phpの設定が以下になっているか確認してください。

config/app.php
// タイムゾーンを Asia/Tokyo に変更
'timezone' => 'Asia/Tokyo',

// ロケールを ja に変更
'locale' => 'ja',

以上となります。
参考になれば幸いです。

16
13
0

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
16
13