如何在Yii 2中全局提供自定义设置数据?

Bre*_*ett 16 php yii yii2

我正在创建一个应用程序,它将一些设置存储在数据库中,理想情况下,在引导期间加载这些设置并通过全局对象使它们可用是一件好事.

可以这样做并以Yii::$app->params某种方式添加吗?

比如你可以创建一个类并将细节作为数组或对象实例返回?

Bre*_*ett 34

好的,我发现了怎么做.

基本上你必须实现bootstrapInterface,下面举例说明我的情况.

设置实现接口的类的路径:

应用程序/配置/ web.php:

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => [
                    'log',
                    'app\base\Settings',
    ],
    //.............
];
Run Code Online (Sandbox Code Playgroud)

所以我Settings.php在这个位置放了一个叫做的课:app\base\Settings.php.

那么这是我的Settings.php文件:

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'];
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

我现在可以通过Yii:$app->params['settings']全局访问我的设置.

关于在这里引导东西的其他方法的额外信息.