yii2模块,Yii2 中关于模块(Modules)的使用及配置
为什么使用模块
模块在大型项目中常备使用,这些项目的特性可分组, 每个组包含一些强相关的特性, 每个特性组可以做成一个模块由特定的开发人员和开发组来开发和维护。
在特性组上,使用模块也是重用代码的好方式, 一些常用特性,如用户管理,评论管理,可以开发成模块, 这样在相关项目中非常容易被重用。
创建及配置模块
模块被组织成一个称为 base path 的目录, 在该目录中有子目录如 controllers,models,views 分别为对应控制器,模型,视图和其他代码,和应用非常类似。 以我上图例子为例:
admin/
Admin.php 模块类文件
config.php 模块配置文件(自行手动创建)
controllers/ 包含控制器类文件
models/ 包含模型类文件
views/ 包含控制器视图文件和布局文件
模块类文件
每个模块都有一个继承 yii\base\Module 的模块类, 该类文件直接放在模块的 base path 目录下, 并且能被 自动加载。当一个模块被访问, 和 应用主体实例 类似会创建该模块类唯一实例,模块实例用来帮模块内代码共享数据和组件。比如上例的Admin.php就是admin模块的模块类文件。
namespace app\modules\admin;
use yii\base\Module;
/**
* Admin module definition class
*/
class Admin extends Module
{
/**
* @inheritdoc
*/
public $controllerNamespace = ‘app\modules\admin\controllers’;
/**
* @inheritdoc
*/
public function init()
{
parent::init();
// 从config.php 加载配置来初始化模块,————此处待会另行说明
\Yii::configure($this, require __DIR__ . ‘/config.php’);
}
}
配置
以上的文件夹及文件创建好之后,就开始就行配置了。当然你也可以使用gii来生成一个模块,请自行百度。
配置主题应用:config/web.php
注意:请在components组件配置同级添加模块配置代码:
‘bootstrap’ => [‘log’],
‘modules’ => [
‘admin’ => [
‘class’ => ‘app\modules\admin\Admin’,
],
],
‘components’ => [
‘redis’ => [
‘class’ => ‘yii\redis\Connection’,
‘hostname’ => “{$_SERVER[‘REDIS_HOST’]}”,
‘port’ => 6379,
‘database’ => 0,
‘password’=>”{$_SERVER[‘REDIS_AUTH’]}”
],
…
…
如果你恰好添加到compoents中,你会遇到一个报错,当你运行的时候。
访问
进行完以上配置的时候其实你已经可以对该模块进行访问了,比如你在admin模块下的controllers文件夹下有一个IndexController控制器,其中一个actionIndex方法,那么你就可以这么访问:
http://yii2test.com/?r=admin/index/index
模块独立配置
这一项我认为是非常重要的一项,举个很简单的例子:
比如你的主题应用下的:config/web.php该配置文件中并没有对所有请求的的返回类型做配置,但是你的模块需要对该模块中的所有action的返回类型做一个设置,比如是:’format’ => \yii\web\Response::FORMAT_JSON,也就是默认返回json,那么这个时候你就会发现不能修改web.php的情况下对子模块的配置不太容易,而且参照官方的方法配置并不生效(也许是我的方法不正确,但确实一直不生效)。按照如下做法你会解决这个问题。
以我的例子为准,在Admin.php模块类文件同级建立config.php,编辑模块类文件:
Admin.php
namespace app\modules\admin;
use yii\base\Module;
/**
* Admin module definition class
*/
class Admin extends Module
{
/**
* @inheritdoc
*/
public $controllerNamespace = ‘app\modules\admin\controllers’;
/**
* @inheritdoc
*/
public function init()
{
parent::init();
$config = require(__DIR__.’/config.php’);
// 获取应用程序的组件
$components = \Yii::$app->getComponents();
// 遍历子模块独立配置的组件部分,并继承应用程序的组件配置
foreach( $config[‘components’] AS $k=>$component ){
if( isset($component[‘class’]) && isset($components[$k]) == false ) continue;
$config[‘components’][$k] = array_merge($components[$k], $component);
}
// 将新的配置设置到应用程序
// 很多都是写 Yii::configure($this, $config),但是并不适用子模块,必须写 Yii::$app
\Yii::configure(\Yii::$app, $config);
// custom initialization code goes here
}
}
上面做了详细的注释,这种解决方法是参考Yii2高级版操作的。
配置文件:config.php
return $configs = [
‘components’ => [
‘response’ => [
‘format’ => \yii\web\Response::FORMAT_JSON,
‘charset’ => ‘UTF-8’,
],
],
];
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » yii2模块,Yii2 中关于模块(Modules)的使用及配置
