我正在创建一个将一些设置存储在数据库中的应用程序,理想情况下,最好在引导过程中加载这些设置并通过对象全局提供它们。
这能以某种方式完成并添加到 Yii::$app->params
吗?
比如您可以创建一个类并以数组或对象实例的形式返回详细信息?
最佳答案
好的,我知道怎么做了。
基本上你必须实现 bootstrapInterface ,下面是我的情况的示例。
设置实现接口(interface)的类的路径:
app/config/web.php:
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => [
'log',
'app\base\Settings',
],
//.............
];
所以我在以下位置放置了一个名为 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'];
}
}
}
我现在可以通过 Yii:$app->params['settings']
全局访问我的设置。
关于引导东西的其他方法的额外信息 here .
关于php - 如何使自定义设置数据在 Yii 2 中全局可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27778477/