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 ...
随机推荐
- TinyHttpd中sockaddr与struct sockaddr_in的区别
上午学习TinyHttpd的源码,sockaddr 结构体以前没接触过, 在网络编程中经常用到struct sockaddr和struct sockaddr_in,这里简单介绍. 在linux环境下, ...
- 11、使用 WinAppDeployCmd 部署appx 包到 Windows10 Mobile上(更新)
在 Windows10 Mobile开发工具里,微软没有提供 wp8 sdk 中 Application Deployment 一样的部署工具,参考 了一下 StackOverflow 论坛上的帖子 ...
- 一个快速、高效的Levenshtein算法实现
转自:http://www.cnblogs.com/ymind/archive/2012/03/27/fast-memory-efficient-Levenshtein-algorithm.html ...
- python 出入任意多个参数
def __init__(self, name, gender, birth, **kw): self.name = name self.gender = gender self.birth = bi ...
- js:数据结构笔记4--队列
队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.deque ...
- ajax的参数
http://www.w3school.com.cn/jquery/ajax_ajax.asp call.addAllremark = function(data){ $.ajax({ url:cal ...
- 寒冰王座[HDU1248]
寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1011 (树形DP+背包)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1011 题目大意:树上取点,先取父亲,再取儿子.每个点,权为w,花费为cost,给定m消费总额,求最大 ...
- JAVA计算文件大小
File f = new File(save_path+File.separator + resouce_id+".zip"); FileInputStream fis = new ...
- BZOJ4010: [HNOI2015]菜肴制作
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...