Как определить константы, которые можно использовать в файлах конфигурации в Laravel 5? - PullRequest
2 голосов
/ 21 июня 2019

Как я проверял в нескольких источниках, способ определения постоянных переменных в Laravel - через файлы конфигурации. Однако в моем случае я хочу использовать константы в моих конфигурационных файлах, что невозможно, поскольку, как я прочитал, невозможно / не рекомендуется вызывать конфигурацию из другого.

Пример

Константы:

define('THE_ID_OF_SOMETHING_NICE', 1);
define('THE_ID_OF_SOMETHING_UGLY', 2);
define('THE_ID_OF_SOMETHING_BAD', 12372);

config1.php

return [
   THE_ID_OF_SOMETHING_NICE = ['many', 'nice', 'data'],
]

config2.php

return [
   ['many', 'nice', 'data', THE_ID_OF_SOMETHING_NICE],
]

Как видите, я просто не могу использовать фактическое значение определенных констант, так как оно будет слишком нечитаемым. Также я не хочу связывать мой файл .env с этими константами, так как он не предназначен для этого.

Есть ли обходной путь для этого? Спасибо.

P.S Почему это так сложно, хотя в PHP должен использоваться базовый принцип использования константных определений. CI выяснил это: /

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Я думаю, вы можете использовать php include на вашем config.php, если вы не хотите добавлять много к .env файлу. Просто так

<?php

include 'something_constant.php';

return [
   THE_ID_OF_SOMETHING_NICE = ['many', 'nice', 'data'],
];
1 голос
/ 21 июня 2019

Лучший способ сделать это - добавить их в файл config/app.php.Где-нибудь над списком провайдеров [] вы можете добавить

'CONST' => ['THE_ID_OF_SOMETHING_NICE' => 1,
            'THE_ID_OF_SOMETHING_UGLY' => 2, 
           ],

и в любом месте в коде для доступа к значениям с помощью помощника laravel config('app.CONST.THE_ID_OF_SOMETHING_NICE');

Вы можете использоватьфайла .env, но имейте в виду, что в производственном процессе этот файл игнорируется, поскольку конфигурация автоматически кэшируется.В .env вы можете добавить строку THE_ID_OF_SOMETHING_NICE=1, а в файл config/app.php вы добавите

'CONST' => ['THE_ID_OF_SOMETHING_NICE' => env('THE_ID_OF_SOMETHING_NICE'),],

, откуда вы можете получить доступ к значению точно так же с помощью помощника config().

Лично я добавляю значения в файл app.php и не беспокоюсь о добавлении значений в .env, потому что в основном они содержат некритическую информацию (например, ваши личные ключи и т. Д.)

Если выКак создать отдельный файл для изоляции от других файлов конфигурации, вы можете создать файл f.ex.config/constants.php и вернуть массив, как это делается в других файлах конфигурации.Сделайте это плоским массивом (без ключа 'CONST').В app/providers/AppServiceProvider в методе register() добавьте

$this->mergeConfigFrom('config/constants.php', 'constants');

Таким образом, вы можете получить доступ к своим константам с помощью config('constants.THE_ID_OF_SOMETHING_NICE');

...