💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 配置项的格式 一个配置文件包含了3个部分: * 基本信息配置。主要指如idbasePath等这些应用的基本信息,主要是一些简单的字符串。 * components配置。配置文件的主体,也是我们接下来要讲的配置项。 * params配置。主要是提供一些全局参数。 我们一般讲的配置项是指component配置项及里面的子项。 简单来讲,一个配置项采用下面的格式: ~~~ [ 'class' = 'path\to\ClassName', 'propertyName' = 'propertyValue', 'on eventName' = $eventHandler, 'as behaviorName' = $behaviorConfig, ] ~~~ 作为配置项: * 配置项以数组进行组织。 * class数组元素表示将要创建的对象的完整类名。 * propertyName数组元素表示指定为propertyName属性的初始值为$propertyValue。 * oneventName数组元素表示将$eventHandler绑定到对象的eventName事件中。 * asbehaviorName数组元素表示用$behaviorConfig创建一个行为,并注入到对象中。 这里的$behaviroConfig也是一个配置项; * 配置项可以嵌套。 其中,class元素仅在特定的情况下可以没有。就是使用配置数组的时候,其类型已经是确定的。 这往往是用于重新配置一个已经存在的对象, 或者是在创建对象时,使用了new或Yii::createObject()指定了类型。 除此以外的大多数情况class都是配置数组的必备元素: ~~~ // 使用 new 时指定了类型,配置数组中就不应再有 class 元素 $connection = new \yii\db\Connection([ 'dsn' = $dsn, 'username' = $username, 'password' = $password, ]); // 使用 Yii::createObject()时,如果第一个参数指定了类型,也不应在配置数 // 组中设定 class $db = Yii::createObject('yii\db\Connection', [ 'dsn' = 'mysql:host=127.0.0.1;dbname=demo', 'username' = 'root', 'password' = '', 'charset' = 'utf8', ]); // 对现有的对象重新配置时,也不应在配置数组中设定 class Yii::configure($db, [ 'dsn' = 'mysql:host=127.0.0.1;dbname=demo', 'username' = 'root', 'password' = '', 'charset' ='utf8', ]); ~~~ 上面的例子中,在没看到配置数组的内容前,已经可以确定对象的类型了。 这种其他情况下,配置数组中如果再有一个 class 元素来设定类型的话,就不合理了。 这种情况下,配置数组不能有 class 元素。 但除此以外的其他情况,均要求配置数组提供 class 元素,以表示要创建的对象的类型 # `on beforeRequest` 在配置文件`config/web.php`添加`on beforeRequest`事件,代码如下: ~~~php 'on beforeRequest' => function ($event) { // 获取 Yii::$app->request->get('code') 然后使用 Model 去查询 // 跟写 action 一样的去写代码 $v1 = (true) ? 'v1' : 'v2' ; Yii::configure(Yii::$app, [ 'modules' => [ 'v1' => [ 'class' => "app\\modules\\{$v}\\Module", ], ], ] ); }, 'components' => [ ] ~~~ 注意层级关系:跟`components`同级。