How to make custom settings data available globally in Yii 2?

前端 未结 3 1430
萌比男神i
萌比男神i 2020-12-28 08:55

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

3条回答
  •  再見小時候
    2020-12-28 09:25

    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.

提交回复
热议问题