I am creating simple web application in Laravel 4. I have backend for managing applications content. As a part of backend i want to have UI to manage applications settings. I wa
Based upon @Batman answer with respect to current version (from 5.1 to 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);
Afiak there is no built-in functionality for manipulating config files. I see 2 options to achieve this:
Config::set('key', 'value');
But be aware that Configuration values that are set at run-time are only set for the current request, and will not be carried over to subsequent requests. @see: http://laravel.com/docs/configuration
In general I'd prefer the first option. Overriding config files can might cause some troubles when it comes to version control, deployment, automated testing, etc. But as always, this strongly depends on your project setup.
I did it like this ...
config(['YOURKONFIG.YOURKEY' => 'NEW_VALUE']);
$fp = fopen(base_path() .'/config/YOURKONFIG.php' , 'w');
fwrite($fp, '<?php return ' . var_export(config('YOURKONFIG'), true) . ';');
fclose($fp);
You'll have to extend the Fileloader, but it's very simple:
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) . ';');
}
}
Usage:
$l = new FileLoader(
new Illuminate\Filesystem\Filesystem(),
base_path().'/config'
);
$conf = ['mykey' => 'thevalue'];
$l->save($conf, '', 'customconfig');