Как редактировать и сохранять пользовательские файлы конфигурации в Laravel?

Я создаю простое веб-приложение в Laravel 4. У меня есть бэкэнд для управления содержимым приложений. Как часть серверной части я хочу иметь пользовательский интерфейс для управления настройками приложений. Я хочу, чтобы мои переменные конфигурации хранились в файле [ПАПКА: /app/config/customconfig.php].

Мне было интересно, есть ли в Laravel возможность иметь собственный файл конфигурации, которым можно управлять/обновлять через пользовательский интерфейс?


person scorpion909    schedule 07.09.2014    source источник


Ответы (4)


Я сделал вот так...

config(['YOURKONFIG.YOURKEY' => 'NEW_VALUE']);
$fp = fopen(base_path() .'/config/YOURKONFIG.php' , 'w');
fwrite($fp, '<?php return ' . var_export(config('YOURKONFIG'), true) . ';');
fclose($fp);
person Batman    schedule 13.02.2017

Вам придется расширить Fileloader, но это очень просто:

class FileLoader extends \Illuminate\Config\FileLoader
{
    public function save($items, $environment, $group, $namespace = null)
    {
        $path = $this->getPath($namespace);

        if (is_null($path))
        {
            return;
        }

        $file = (!$environment || ($environment == 'production'))
            ? "{$path}/{$group}.php"
            : "{$path}/{$environment}/{$group}.php";

        $this->files->put($file, '<?php return ' . var_export($items, true) . ';');
    }
}

Использование:

$l = new FileLoader(
    new Illuminate\Filesystem\Filesystem(), 
    base_path().'/config'
);

$conf = ['mykey' => 'thevalue'];

$l->save($conf, '', 'customconfig');
person Antonio Carlos Ribeiro    schedule 07.09.2014
comment
Спасибо. Вместо base_path() я использовал app_path(). - person hctopcu; 14.10.2014
comment
Привет @Antonio, куда поместить новый расширенный класс, в какую папку? В настоящее время я использую laravel 5.5, пожалуйста, помогите. - person Bhupendra Mistry; 18.12.2017

Afiak нет встроенного функционала для манипулирования конфигурационными файлами. Я вижу 2 варианта достижения этого:

  • Вы можете сохранить свою пользовательскую конфигурацию в своей базе данных и переопределить конфигурацию по умолчанию во время выполнения с помощью Config::set('key', 'value');. Но имейте в виду, что

Значения конфигурации, заданные во время выполнения, устанавливаются только для текущего запроса и не переносятся в последующие запросы. @см.: http://laravel.com/docs/configuration

  • Поскольку файлы конфигурации представляют собой простые массивы php, их легко читать, манипулировать и записывать их. Таким образом, с помощью небольшого пользовательского кода это должно быть сделано быстро.

В общем, я бы предпочел первый вариант. Переопределение файлов конфигурации может вызвать некоторые проблемы, когда речь идет о контроле версий, развертывании, автоматическом тестировании и т. д. Но, как всегда, это сильно зависит от настройки вашего проекта.

person passioncoder    schedule 07.09.2014

На основе ответа @Batman относительно текущей версии (от 5.1 до 6.x):

config(['YOUR-CONFIG.YOUR_KEY' => 'NEW_VALUE']);
$text = '<?php return ' . var_export(config('YOUR-CONFIG'), true) . ';';
file_put_contents(config_path('YOUR-CONFIG.php'), $text);
person Nicholas Vasilaki    schedule 08.01.2020