yii2项目实战-配置
首先在阅读之前,这里有几篇入门的介绍你可以先看看。如果你已经安装过yii2,但是在了解yii2的过程中头脑略懵,也推荐你看看。
下面我们从yii2的配置说起。
yii2配置项的理解
说起项目的配置,一种简单的理解概念就是为项目做一个基本的配置,类似数据库配置、路由配置等等。但是yii2的配置往往更复杂一些,在yii2中,配置项一定是针对对象进行的配置,其作用就是对对象的初始化或者说是配置对象的默认属性。可能刚开始接触yii的会有一点不好理解,我们举个栗子进行说明:
假设我们需要为当前项目封装一个全局性的公共的方法,在yii2中怎么解决?
我们假设全局性的公共类文件位于common/components/Helper.php(components文件夹是我们自己创建的,用于以后单独存放我们自己的组件类),其内容如下:
namespace common\components; class Helper { public static function checkedMobile($mobile) { return $mobile; } }
如果是在平常,我们可能会这样使用
use common\components\Helper; Helper::checkMobile('186xxx');
但是,为了说明组件化的配置使用,我们需要在配置文件中增加一项对components的配置。你可以在你的 common\config\main.php 文件中添加如下配置
'components' => [ // other code... 'helper' => [ 'class' => 'common\components\Helper', 'property' => '123', ], ],
你可以像下面这样使用
var_dump(Yii::$app->helper->checkedMobile('186xxx')); var_dump(Yii::$app->helper->property);
注:在advanced版本中,对一个项目而言,默认有4个配置文件。以backend引用为例
backend\config\main-local.php backend\config\main.php common\config\main-local.php common\config\main.php
如果我在多个配置文件中都配置了某一项怎么办?
从应用的入口文件 backend\web\index.php 我们了解到,最终生效的配置是经过 yii\helpers\ArrayHelper::merge 方法处理的。
$config = yii\helpers\ArrayHelper::merge( require(__DIR__ . '/../../common/config/main.php'), require(__DIR__ . '/../../common/config/main-local.php'), require(__DIR__ . '/../config/main.php'), require(__DIR__ . '/../config/main-local.php') );
也就是说这四个文件,优先级分别是 app\config\main-local.php > app\config\main.php > common\config\main-local.php > common\config\main.php,其中app代表你当前的应用,比如backend
也就是说如果我们在common\config\main.php 和app\config\main.php 文件内都配置了某一项,很显然app\config\main.php 的配置会覆盖掉 common\config\main.php 的配置。
为什么要这么设计呢?main-local又是什么鬼?
第一个问题很好理解,很显然 common下的配置可以多个应用共有,app下面的配置只针对当前应用生效。
如果你有使用git的习惯,你会发现在app\config目录下有一个隐藏的 .gitignore 文件,我们知道,这个文件内我们可以忽略某些文件,不允许提交到远程git地址。你打开后会发现,main-local.php恰好罗列其中。也就是说这个文件只会在我们本地生效。当我们把项目部署到服务器之后,这个文件并不会被提交到远程服务器,服务器会有他自己的main-local。也就是说不管是在你的测试服务器还是生产服务器,都有自己单独的main-local.php文件,只针对当前环境的配置。
我们举一个例子:你可能在生产环境配置的缓存方式是redis缓存,但是为了节省资源,你本地可能就需要配置为文件缓存了。为了达到这一目的,我们可以分别在本地的main-local.php和生产服务器的main-local.php中配置cache组件。
从上面的栗子中不难看出,其配置项的格式大多数情况下只需要指定一个class即可。当然,我们还可以为配置项(比如说我们配置的全局类)配置属性、行为和事件,鉴于理解,我们这里只对属性进行了配置,行为和事件后面我们会再说。
实战开发所需的基本配置
下面我们在做一些我们后面所需要的基本配置,但不保证是必须的。
return [ 'components' => [ // 配置缓存 'cache' => [ 'class' => 'yii\caching\FileCache', ], // 配置数据库 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=advanced', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'enableSchemaCache' => true, 'schemaCacheDuration' => 24*3600, 'schemaCache' => 'cache', ], ], // 配置语言 'language'=>'zh-CN', // 配置时区 'timeZone'=>'Asia/Chongqing', ];
注意language和timeZone的位置,有很多同学写在components里面了
- 评论区