I\'m creating an application which stores some settings in the database and ideally it would be good to load these settings during bootstrapping and make them available via
Ok, I found out how to do it.
Basically you have to implement the bootstrapInterface, an example below for my situation.
Set the path to your class that implements the interface:
app/config/web.php:
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => [
'log',
'app\base\Settings',
],
//.............
];
So I have placed a class called Settings.php at the location: app\base\Settings.php.
Then this is my Settings.php file:
namespace app\base;
use Yii;
use yii\base\BootstrapInterface;
/*
/* The base class that you use to retrieve the settings from the database
*/
class settings implements BootstrapInterface {
private $db;
public function __construct() {
$this->db = Yii::$app->db;
}
/**
* Bootstrap method to be called during application bootstrap stage.
* Loads all the settings into the Yii::$app->params array
* @param Application $app the application currently running
*/
public function bootstrap($app) {
// Get settings from database
$sql = $this->db->createCommand("SELECT setting_name,setting_value FROM settings");
$settings = $sql->queryAll();
// Now let's load the settings into the global params array
foreach ($settings as $key => $val) {
Yii::$app->params['settings'][$val['setting_name']] = $val['setting_value'];
}
}
}
I can now access my settings via Yii:$app->params['settings'] globally.
Extra information on other ways to bootstrap stuff here.