Laravel6で定数を定義する方法とキャッシュの消し方について書きます。
テンプレートからもコントローラーからも簡単に呼べますのでラクチンです!
定数の定義
参考:https://qiita.com/clustfe/items/4fa169c6d5114a9b6f4e
↑の記事に色々やり方を書いてくれています。素晴らしくナイスな記事です。
最初に採用した方法
クラス内定数を使うパターンです。
以下のようにファイルを配置します。定義ごとにファイルを分けます。Constantsディレクトリは自分で作成します。
app
└ Constants
└ EmploymentType.php
ファイル内はこのように記述します。
<?php
namespace App\Constants;
class EmploymentType
{
const EMPLOYMENT_TYPE_EMPLOYEE = 1;
const EMPLOYMENT_TYPE_CONTRACTEMPLOYEE = 2;
const EMPLOYMENT_TYPE_PARTTIME = 3;
const LIST = [
self::EMPLOYMENT_TYPE_EMPLOYEE => '正社員',
self::EMPLOYMENT_TYPE_CONTRACTEMPLOYEE => '契約社員',
self::EMPLOYMENT_TYPE_PARTTIME => 'パート・アルバイト',
];
}
定義したものはconfig/app.phpでaliasesに定義
'aliases' => [
-- 中略 --
'ConstEmploymentType' => App\Constants\EmploymentType::class,
],
なんでこの定義方法かと言いますとバラバラのファイルで管理できるということと、セレクトボックスやラジオといった選択肢で使う項目ってif文に使ったりしますよね。
上記のコードでいうと、正社員の時に○○、契約社員の時に△△と処理を分けたりすることが考えられます。
if文で使うことを考えると個別の値をクラス内定数で書けるというのが採用の理由です。
※別の方法でもif文で使えるように書けたので今は別の方法を使っています。この記事の下のほうに書いています。
定数の使い方
テンプレートから
テンプレート内ではクラス内定数を直接呼び出します。
<select name="employment_type">
@foreach(\ConstEmploymentType::LIST as $key => $data)
<option value="{{ $key }}" @if($employee->employment_type == $key) selected @endif>{{ $data }}</option>
@endforeach
</select>
$employee->employment_type == $keyのところは初期値の表示なので、それぞれの環境に合わせて書いてくださいね。
コントローラーから
コントローラーからも同じように直接呼び出します。
$employment_type = \ConstEmploymentType::LIST
クラス内定数を呼ぶこともできます。
$hoge = \ConstEmploymentType::EMPLOYMENT_TYPE_EMPLOYEE
反映されない時、エラーが出る時はキャッシュを消そう
以下のコマンドを実行します。
php artisan config:clear
現在使っている方法
以下の方法でもif文で使えるように定義することができたので紹介します。config/app.phpに書くのが面倒なので今はこちらを使っています。
こちらの方が書ける自由度は高いですが、複数人で開発する場合は定義方法がバラバラにならないように書き方を決めておいた方がいいですね。
クラス内定数で定義する方法と速度に違いあれば速いほうがいいですけど、そんなに変わらないなら好みで決めてもいいかもしれないですね。
config
└ constants
└ employment_type.php
内容はこのような感じです。
<?php
$employee = 1;
$contract_employee = 2;
$parttimer = 3;
return array(
'list' => array(
$employee => '正社員',
$contract_employee => '契約社員',
$parttimer => 'パート・アルバイト',
),
'const' => array(
'employee' => $employee,
'contract_employee' => $contract_employee,
'parttimer' => $parttimer,
),
);
?>
config内で定義したら↓のような使い方になります。
// テンプレ
@foreach(config('constants.employment_type.list') as $key => $data)
@endforeach
// コントローラー
// 書き方によっては行が長くなるのが弱点
$temp = \Config::get('constants.employment_type.const.contract_employee');
コメント