配置控件
Yii是一个非常易于定制的框架。而且,在所有的可定制代码中,有一种非常方便的方法来设置应用的不同部分。在Yii中,是通过配置config文件夹中的文件进行的。
准备
按照官方指南http://www.yiiframework.com/doc-2.0/guide-start-installation.html的描述,使用Composer包管理器创建一个新的应用。
如何做…
如果你之前使用过Yii,那么你可能已经配置过一个数据库连接:
return [
…
'components' => [
'db' => [
'class' => 'system.db.CDbConnection',
'dsn' => 'mysql:host=localhost;dbname=database_name',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
…
],
…
];
当你希望在应用的所有部分使用一个控件时,就需要使用配置控件的方法。在之前的配置中,你可以通过控件的名字访问它,例如Yii::$app->db。
工作原理…
当你第一次直接或者通过Active Record模型使用Yii::$app->db控件时,Yii创建了一个模型,并使用应用配置文件中的component部分中db数组初始化它的公共属性。在先前的代码中,dsn会被赋值给yii\db\Connection::dsn,username会被赋值给Connection::username,等等。
如果你想找到charset代表的意思,或者想知道db控件中其它可以配置项,你需要知道它的类。在db控件这个例子中,类是yii\db\Connection。你只需要打开这个类,并查看它的公共属性,这些你可以从配置中设置。
在先前的代码中,class属性有一点不同,因为它被用于指定控件的类名。它在yii\db\Connection中并不存在。因此,可以按如下方法复写一个类:
return [
…
'components' => [
'db' => [
'class' => app\components\MyConnection',
…
],
…
],
…
];
你可以复写每一个应用控件;当一个标准控件不适合你的应用时,这种方法非常有用。
内置控件
现在,我们来看看YIi都有哪些标准控件可供配置。有两个应用类型绑定了Yii:
- Web应用(yii webApplication)
- 控制台应用(yii\console\Application)
这两个都继承自yii\base\Application,所以控制台和web应用共用这些模板。
你可以从应用的方法coreComponents()的源代码获取这些控件的名称。
你可以通过简单的添加新配置项目,并将它们的类属性指定你自定义的类,来添加你自己的应用控件(继承yii\base\Component)。
参考
- 控制台和web应用控件列表参见http://www.yiiframework.com/doc-2.0/guide-structure-application-components.html
- 更多关于创建自己控件的信息,参见:
- 服务定位器章节
- 第八章的创建控件章节