如何在 Yii 2 中使自定义设置数据在全球范围内可用?
我正在创建一个应用程序,该应用程序将一些设置存储在数据库中,理想情况下,最好在引导期间加载这些设置,并通过全局对象使它们可用。
这可以以某种方式完成并添加到?Yii::$app->params
例如,您可以创建一个类并将详细信息作为数组或对象实例返回?
我正在创建一个应用程序,该应用程序将一些设置存储在数据库中,理想情况下,最好在引导期间加载这些设置,并通过全局对象使它们可用。
这可以以某种方式完成并添加到?Yii::$app->params
例如,您可以创建一个类并将详细信息作为数组或对象实例返回?
好吧,我发现了如何做到这一点。
基本上,你必须实现bootstrapInterface,下面的例子是我的情况。
设置实现接口的类的路径:
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']
有关引导内容的其他方法的额外信息,请单击此处。
我参加派对有点晚了,但有一种更简单的方法可以做到这一点。
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => [
'log',
],
//.............
'params' = [
'adminEmail' => 'admin@example.com',
'defaultImage' => '/images/default.jpg',
'noReplyEmail' => 'noreply@example.com'
],
];
现在,您可以使用以下语法简单地访问这些变量
$adminEmail = \Yii::$app->params['adminEmail'];