Yii源码阅读笔记(十二)
Action类,控制器中方法的基类:
namespace yii\base;
use Yii;
/**
* Action is the base class for all controller action classes.
* Action是所有控制器方法的基类
* Action provides a way to reuse action method code. An action method in an Action
* class can be used in multiple controllers or in different projects.
* Action提供了一种重用代码的方法,一个Action类中的方法可以被多个控制器或不同的项目调用
* Derived classes must implement a method named `run()`. This method
* will be invoked by the controller when the action is requested.
* 驱动类必须实现run()方法,该方法在action被请求的时候被控制器调用
* The `run()` method can have parameters which will be filled up
* with user input values automatically according to their names.
* 如果请求带有参数,run方法会自动带参数运行,例如:
* For example, if the `run()` method is declared as follows:
*
* ```php
* public function run($id, $type = 'book') { ... }
* ```
*
* And the parameters provided for the action are: `['id' => 1]`.
* Then the `run()` method will be invoked as `run(1)` automatically.
*
* @property string $uniqueId The unique ID of this action among the whole application. This property is
* read-only.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class Action extends Component
{
/**
* @var action的ID
*/
public $id;
/**
* @var Controller|\yii\web\Controller 当前action的控制器
*/
public $controller;
/**
* Constructor.
* 构造函数,用于初始化action 的ID和控制器,并且调用component的构造方法初始化对象
*
* @param string $id the ID of this action
* @param Controller $controller the controller that owns this action
* @param array $config name-value pairs that will be used to initialize the object properties
*/
public function __construct($id, $controller, $config = [])
{
$this->id = $id;
$this->controller = $controller;
parent::__construct($config);
}
/**
* Returns the unique ID of this action among the whole application.
* 用于取得当前action的唯一ID 形式为controller ID/action ID
* @return string the unique ID of this action among the whole application.
*/
public function getUniqueId()
{
return $this->controller->getUniqueId() . '/' . $this->id;
}
/**
* Runs this action with the specified parameters.
* This method is mainly invoked by the controller.
* 用指定的参数运行,该方法主要被控制器调用
*
* @param array $params the parameters to be bound to the action's run() method.
* @return mixed the result of the action
* @throws InvalidConfigException if the action class does not have a run() method
*/
public function runWithParams($params)
{
if (!method_exists($this, 'run')) {//如果run方法不存在,抛出异常
throw new InvalidConfigException(get_class($this) . ' must define a "run()" method.');
}
$args = $this->controller->bindActionParams($this, $params);//绑定参数
Yii::trace('Running action: ' . get_class($this) . '::run()', __METHOD__);//记录trace信息
if (Yii::$app->requestedParams === null) {
Yii::$app->requestedParams = $args;//如果是命令行运行,按命令行方式获取参数
}
if ($this->beforeRun()) {//调用run的前置操作
$result = call_user_func_array([$this, 'run'], $args);//用php内置函数带参数执行run方法
$this->afterRun();//调用后置操作
return $result;//返回结果
} else {
return null;
}
}
/**
* This method is called right before `run()` is executed.
* You may override this method to do preparation work for the action run.
* If the method returns false, it will cancel the action.
* run方法的前置方法,通常在子类中重写来实现某些前置功能
*
* @return boolean whether to run the action.
*/
protected function beforeRun()
{
return true;
}
/**
* This method is called right after `run()` is executed.
* You may override this method to do post-processing work for the action run.
* run方法的后置方法,通常在子类中重写来实现某些后置功能
*
*/
protected function afterRun()
{
}
}
Yii源码阅读笔记(十二)的更多相关文章
- Yii源码阅读笔记(二十九)
动态模型DynamicModel类,用于实现模型内数据验证: namespace yii\base; use yii\validators\Validator; /** * DynamicModel ...
- Yii源码阅读笔记(二十八)
Yii/web中的Controller类,实现参数绑定,启动csrf验证功能,重定向页面功能: namespace yii\web; use Yii; use yii\base\InlineActio ...
- Yii源码阅读笔记(二十六)
Application 类中设置路径的方法和调用ServiceLocator(服务定位器)加载运行时的组件的方法注释: /** * Handles the specified request. * 处 ...
- Yii源码阅读笔记(二十四)
Module类中获取子模块,注册子模块,实例化控制器,根据路由运行指定控制器方法的注释: /** * Retrieves the child module of the specified ID. * ...
- Yii源码阅读笔记(二十二)
Module类,属性的注释和构造函数的注释: <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) ...
- Yii源码阅读笔记(二十五)
Module类中剩余部分代码,通过控制器ID实例化当前模块的控制器,当前模块的Action方法的前置和后置方法: /** * This method is invoked right before a ...
- Yii源码阅读笔记(二十)
View中应用布局和缓存内容部分: /** * Begins recording a block. * This method is a shortcut to beginning [[Block]] ...
- Yii源码阅读笔记(二)
接下来阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— namespace yii; use yii\base\InvalidConfigExceptio ...
- Yii源码阅读笔记(二十七)
Theme 类,即一个应用的主题,主要通过替换路径实现主题的应用,里边的方法为获取根路径和根链接,以及应用主题的方法: namespace yii\base; use Yii; use yii\hel ...
- Yii源码阅读笔记(二十三)
Module类中的辅助功能方法: /** * Returns an ID that uniquely identifies this module among all modules within t ...
随机推荐
- hrbustoj 1179:下山(DFS+剪枝)
下山Time Limit: 1000 MS Memory Limit: 65536 KTotal Submit: 271(111 users) Total Accepted: 129(101 user ...
- 小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
各种区块的描述: 很多朋友喜欢听小甲鱼的PE详解,因为他们觉得课堂上老师讲解的都是略略带过,绕得大家云里雾里~刚好小甲鱼文采也没课堂上的教授讲的那么好,只能以比较通俗的话语来给大家描述~ 通常,区块中 ...
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建
一.创建文件~ MainMenuScene.h MainMenuScene.cpp MainMenuLayer.h MainMenuLayer.cpp 那个场景的搭建就不多说了,那个我的打 ...
- 关于LR中的EXTRARES
LoadRunner脚本之EXTRARES参数 EXTRARES:分隔符,表示标记下一个属性是资源属性的列表(list of resource attributes). [EXTRARES后的资源是由 ...
- vi总结
vi常用命令整理 ★命令模式 移动光标 h 或 向左方向键(←) → 光标向左移动一个字元 j 或 向下方向鍵(↓) → 光标向下移动一个字元 k 或 向上方向鍵(↑) → 光标向上移动一个字元 l ...
- [LintCode] Word Break
Given a string s and a dictionary of words dict, determine if s can be break into a space-separated ...
- Google地图接口API之地图事件(四)
演示几个地图事件: 1. 点击标记缩放地图 仍然使用上一遍文章使用的英国伦敦的地图.点用户点击标记时实现缩放地图的功能(点击标记时绑定地图缩放事件). 代码如下: <html> <h ...
- iOS @try
try{ //1:抛出异常的代码 //2:代码 }catch(){ //3:代码 //4:抛出异常 }finally{ //5:代码 } //6:代码要明确的一点是:不管try是否抛出异常,final ...
- ural 1242. Werewolf
1242. Werewolf Time limit: 1.0 secondMemory limit: 64 MB Knife. Moonlit night. Rotten stump with a ...
- BZOJ3808 : Neerc2012 Labyrinth of the Minotaur
左上角和右下角不四连通等价于左下角和右上角八连通 枚举正方形的左上角,先二分出最大的边长,使得里面不含障碍物 然后再二分出最小的边长,使得两部分连通,用前缀和判断 这题WA了好久…一直对拍都没问题…于 ...