>模块
>>是独立的软件单元了,由模型、视图、控制器和其它支持组件组成,终端用户可以访问应用主体中已经安装的控制器。模块就是小的应用主体
>>模块会在直接路径下放置模块类文件,负责共享模块间的数据。
>模块中的配置
>>模块中的控制器,注意控制器的命名空间是应用主体,主目录,子目录等……
>>模块中的视图,可以指定布局
>>使用模块时,需要配置应用主体配置。(应用主体在入口脚本中中生成也在入口脚本中配置)
(还有一些其他的基础配置实在config中完成额)
>>路由、访问模块
// 获取ID为 "forum" 的模块
$module = \Yii::$app->getModule('forum');
// 获取处理当前请求控制器所属的模块
$module = \Yii::$app->controller->module
>>模块也支持嵌套
>过滤器
>>是控制器动作执行之前或之后执行的对象。(终于他妈找到权限控制的地方了)
访问控制过滤器,可以在动作执行之前来控制特殊终端用户是否具有权限执行动作
内容压缩过滤器可在动作执行之后发送给终端用户之前压缩影响内容。
>>过滤器包含预过滤和后过滤
>过滤器的使用
>>过滤器是一种特殊的行为,与使用行为是一致得,可以在控制器中覆盖behavors()方法,来申明过滤器。
public function behaviors()
{
return [
[
'class' => 'yii\filters\HttpCache',
'only' => ['index', 'view'],//只应用到index和view动作上
'lastModified' => function ($action, $params) {
$q = new \yii\db\Query();
return $q->from('user')->max('updated_at');
},
],
];
}
控制器的过滤器默认应用到该类的所有动作身上,可以通过配置yii\base\ActionFilter::only属性明确指定控制器应用到哪些动作。
也可以使用yii\base\ActionFilter::except属性,调用一些动作布置性过滤器
>>可以在模块或应用主体中申明过滤器,申明之后过滤器会应用到所属模块或应用主体的所有控制器上。
>>当一个动作有多个过滤器是,根据以下规则先后执行
预过滤:顺序执行behavoirs()中所有的过滤器
预过滤后执行操作
后过滤
倒序执行beheviors中列出的所有过来不起
>创建过滤器
继承yii\base\ActionFilter并股改yii\base\ActionFilter::beforAction()/afterAction()
//对下面的代码不是很理解,不知道他怎么执行动作发挥作用
namespace app\components;
use Yii;
use yii\base\ActionFilter;
class ActionTimeFilter extends ActionFilter
{
private $_startTime;
public function beforeAction($action)
{
$this->_startTime = microtime(true);
return parent::beforeAction($action);
}
public function afterAction($action, $result)
{
$time = microtime(true) - $this->_startTime;
Yii::trace("Action '{$action->uniqueId}' spent $time second.");
return parent::afterAction($action, $result);
}
}
>核心过滤器
yii\base\ActionFilter
yii\filters\AccessControl
yii\filters\auth
yii\filters\HttpCache
yii\filsers\PageCache
yii\filters\RateLimiter
$only : array :list of action id
$owner:yii\base\Component对象:the owner of this behavior
afterAction()当动作被执行后调用
afterFilter($event)过滤后执行的事件
attach($owner)事件和动作绑定
beforeAction($action)在动作之前的动作
beforeFilter($event)过滤之前的事件
canGetProperty()
canSetProperty()
className()
detach()解除事件和动作行为的关联
events()
init()
hasMethod()
hasProperty()
//对事件动作行为的关系还是比较迷惑,对动作行为和事件之间的连接方式还不是太懂。
>类学习进度
yii\base\module
yii\base\ActionFilter
yii\filters\AccessControl
yii\filters\auth
yii\filters\HttpCache
yii\filsers\PageCache
yii\filters\RateLimiter