Хорошо, я узнал, как это сделать.
В принципе, вы должны ввести bootstrapInterface, пример ниже для моей ситуации.
Установите путь к классу, который реализует интерфейс:
приложение/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.
Вы можете использовать сеанс. – Kshitiz
Поскольку '' 'Yii :: $ app-> params''' - это просто массив, вы можете добавить в него значения даже позже, используя что-то вроде' '' Yii :: $ app-> params ['someSetting'] = ' значение '; '' '. Но я не уверен, где именно будет иметь смысл делать что-то подобное. Хотелось бы услышать некоторые предложения о лучших практиках в этом отношении. – Tahir
@Kshitiz Это было бы нормально, за исключением того, что сеансы могут быть уничтожены (скажем, если пользователь вышел из системы), и я не хочу, чтобы это происходило с этим. – Brett