質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

3回答

1723閲覧

Laravel constで配列のキーに別の定数値を使いたいです。

oragen

総合スコア7

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/07/01 02:58

下記のような定義を行いたいです。

const USER_GENERAL = 1; const USER_ADMIN = 2; const USER_ROLES = [ USER_GENERAL => '一般', USER_ADMIN => '管理者', ];

これをconfigディレクトリ下に例えばa.phpとして配置すると、普通に動作はするのですが、
artisan config:cacheを行うとエラーになってしまいます。

ErrorException : Constant USER_GENERAL already defined

constを使わずに、配列で定義すればエラーにならないですが、そうすると下記のように定義するしかなく、例えばUSER_ADMINの値を3に変えた場合は、USER_ROLESの方も値を3に変更しなければならず、定義の関連性が無くなってしまいます。

return [ 'USER_GENERAL' => 1, 'USER_ADMIN' => 2, 'USER_ROLES' => [ 1 => '一般', 2 => '管理者', ], ];

ネットで調べたところ、定数クラスを作って、エイリアスに追加して呼び出すというような方法が紹介されていました。

namespace App; class MyApp { const MYCONST = 'val'; } ーーー 'aliases' => [ //... 'MyApp' => App\MyApp::class, ーーーー MyApp::MYCONST

冒頭のような定義を行う場合は、定数クラスを作る方法が一般的と考えて良いでしょうか?

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

defined関数
https://www.php.net/manual/ja/function.defined.php
を使用し、設定されていればdefineをスキップするようにしてはどうでしょうか

投稿2019/07/01 03:26

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/01 03:30

その手がありましたね
guest

0

質問のロールに関してはDB使ったほうがいい。

Laravelではconfigがほぼ定数として使われるので
constもdefineも使わず普通に

'test' => env('TEST'), 'test2' => 2,

素のPHPの意味での定数はほとんど使わない。

後はいつもの。
ちょっとした管理者権限なら認可でもっと簡単に作ったほうがいい。
Laravel公式はロールとかマルチ認証とか導入せず認可だけで管理者機能実現している。
1人から数人程度の管理者なら実際これで十分。
何度書いても無駄に複雑に作る人が減らない。

投稿2019/07/01 04:52

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

configはキー1でファイルを指定し、読み込みに行きます。
つまり、呼び出される回数だけconst が定義されることになり、提示のalready definedとなります。

.envも視野に入れてよいとは思うのですが、関連性を重視したいのでしたら定数よりもDBのほうが良いかと思います。
特に権限まわりは今後増えることもあるでしょうし意味合いが変わったり懸念されているように番号が変わったりすることもないとは言えません。
コードを直接書き換えるのはメンテナンス性や保守性の観点からよろしくはないので、そういった「変更の可能性がある情報」はDBに持っておいたほうが良いと思います。

投稿2019/07/01 03:20

m.ts10806

総合スコア80854

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問