举杯邀月

Yii2.0中,获取config配置信息,动态管理组件components

摘要:Yii2动态修加载配置文件、动态修改配置文件,在程序的执行过程中直接修改配置文件,这在很多场景中很实用,必须常连接中我们需要修改配置却又不可能每次都去重启进程,这就很有必须去动态更改配置了。

组件是 Yii 应用的主要基石。是 yii\base\Component 类或其子类的实例。 具有非常强大的功能, 我们的操作大部分都是通过内置组件实现的

在程序的执行过程中直接修改配置文件,这在很多场景中很实用,必须常连接中我们需要修改配置却又不可能每次都去重启进程,这就很有必须去动态更改配置了,Yii提供了几种方法来设置组件

1.获取组件

使用getComponents方法,该方法返回所有的组件信息, 该方法有个$returnDefinitions参数, 默认等于true, 返回所有组件的定义, 其实就是配置数组

如果将该参数设置为false, 则返回所有已有实例的组件我们要重新配置组件的话, 则需要取组件的配置数组

$config = \Yii::$app->getComponents()['mailer'];
var_dump($config);

/** 打印结果 **/
'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    'useFileTransport' =>false,
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'smtp.163.com',  
        'username' => 'username',
        'password' => 'password',
        'port' => 'port',
        'encryption' => 'ssl',
    ],
    'messageConfig'=>[
        'charset'=>'UTF-8',
        'from'=>['email_from'=>'email_from_title']
    ],
],
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

2.重新设置组件

我们可以定义新的组件配置文件,然后把新旧两个参数合二为一,借助于 \yii\helpers\ArrayHelper::merge 方法,组成新的组件参数。

得到新的组件配置, 此时就可以向yii注册组件信息了,这里我们使用Yii::$app->set()方法

Yii::$app->set('mailer', $newMailerConfig);
1

set方法有两个参数, 第一个参数是组件的ID, 第二个参数是组件的配置信息数组

如果组件ID已存在,yii会自动销毁旧组件, 创建新的组件

使用 Yii::$app->setComponents()

适用于批量设置组件,例如:

Yii::$app->setComponents([
    'mailer' => $newMailerConfig,
    'db' => $dbConfig,
    'redis' => $redisConfig,
]);
1
2
3
4
5

使用 Yii::configure()

同样,使用Yii::configure也可达到目的,同时他还具有批量设置组件的功能

不仅如此,他还具有为其他对象批量设置属性的功能

Yii::configure(Yii::$app, [
    'components' => [
        'mailer' => $newMailerConfig
    ]
]);
1
2
3
4
5

3.卸载组件

调用 clear方法即可, 将同时从组件定义, 组件实例中删除该组件

Yii::$app->clear('mailer');
1

作者:举杯邀月

出处: http://www.hug-code.cn/archives/5fca053e3db3c.html

2020-09-08 标签: yii2php