核心概念
- Object基类,构造函数()初始化属性
- Behavior行为, 一般注册Component的事件,公用方法及属性供Component调用
- Component组件, 事件管理(on, off, trigger, attach绑定事件 )、动态属性管理(__get)、动态方法管理(__call)
- ServiceLocator容器, 现在框架标配
- Module模块,有自己的controller, view, widget或静态资源
- Application应用(web, console), 继承模块, 引导扩展、组件; handle请求,并响应结果(MVC执行流程)
- Yii全局对象, 大量常用的静态方法(自动加载函数、t函数、设置属性函数、日志函数), 静态属性($app, 容器,别名,类名映射)
- ActionFilter过滤器, 在执行action之前进行某种操作, 监听Controller::EVENT_BEFORE_ACTION事件, 设置only属性数组,可只对某些action起作用 @see ActionFilter::isActive()
- Authentication 身份认证,@see Yii\web\User, IdentityInterface
- Authorization 授权, @see yii\filters\AccessControl, AccessRule
MVC的运行
根据id找到模块或设置ctrl路径的Controller对象,
运行Ctrl->runAction() 方法
-a)执行berforAction(), 包括模块及自身的
-b)执行$action->runWithParams(), 执行action::berforeRun(), run(), afterRtun()
-c)执行afterAction(), 包括自身及模块的
执行流程拦截点:@see ActionFilter
-1) (module, ctrl)::berforeAction()返回false
-2) (module, ctrl)::EVENT_BEFORE_ACTION, 事件监听
-3) action->beforeRun() 返回 false
过滤结果拦截点:
-1> (module, ctrl)::afterAction()
-2> (module, ctrl)::EVENT_AFTER_ACTION, 事件监听
改变默认执行流程:
-1)改变action, 设置ctrl->actions(), 映射新的Action类, @see ctrl::createAction(id)
-2) 改变ctrl加载,设置app|module的controllerMap属性,@see Module::createController
视图路径的渲染:
-1) layout路径的查询, 优先 module->layoutPath, 后app->layoutPath, @see ctrl::findLayoutFile()
-2) 视图的路径查询, @see View::findViewFile()
a. @path别名路径;
b. //path App::getViewPath();
c. /path Module::getViewPath();
d. ViewContextInterface, 如widget, ViewContextInterface::getViewPath()
e. $this->getViewFile(), 最后的防线
静态资源的发布:
a. View运行AssetBundle::register($view) ,
b. 调用View::getAssetManager()->getBundle($name), 得到AssetBundle
c. 运行 AssetBundle->publish($am) 进行发布到网站根目录并设置 css, js属性
d. 在视图文件设置点,一般是layout文件, 如View::head(), begeinBody(), endBody()
e. 在View::endBody() 中调用AssetBundle::registerAssetFiles($view) 获取之前设置发布后的js, css
参考:http://www.yiiframework.com/doc-2.0/index.html