Как я проверил в нескольких источниках, 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 разобрался с этим :/
Определите такую константу в файле .env, затем
@lighter кажется единственным способом. Я никогда не думал, что пойду на ванильный PHP, все еще надеясь на более Laravel :) спасибо
@ACD, я публикую свой ответ. Если у вас есть какие-либо идеи, я надеюсь, что вы можете поделиться со мной, спасибо.






Лучший способ сделать это — добавить их в файл config/app.php. Где-то выше списка provider[] вы можете добавить
'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');
дело в том, что у меня есть тонны этих определенных переменных. как 500+ из них, я не хочу раздувать какие-либо основные файлы laravel. Я хочу, чтобы они были где-то еще изолированы.
Я добавлю к моему ответу еще одну возможность, которая может удовлетворить ваш запрос.
В дальнейшем вы можете сгруппировать свои константы, так как их так много в 'user' => [...], 'admin' => [...], 'public' => [...], и т. д. Доступ к значению будет config('constants.public.THE_ID_OF_SOMETHING_NICE');
Я думаю, вы можете использовать php include в своем config.php, если вы не хотите добавлять много в .env файл. Просто так
<?php
include 'something_constant.php';
return [
THE_ID_OF_SOMETHING_NICE = ['many', 'nice', 'data'],
];
Я думаю, вы можете использовать
include? И вы можете управлять им там, где хотите, и использовать его.