view剩余代码

     /**
* @return string|boolean the view file currently being rendered. False if no view file is being rendered.
* 当前正在渲染的视图文件
*/
public function getViewFile()
{
return end($this->_viewFiles);
} /**
* This method is invoked right before [[renderFile()]] renders a view file.
* The default implementation will trigger the [[EVENT_BEFORE_RENDER]] event.
* 前置事件,执行[renderFile()]时被调用,默认触发[[EVENT_BEFORE_RENDER]]事件
* If you override this method, make sure you call the parent implementation first.
* @param string $viewFile the view file to be rendered. 要渲染的视图文件。
* @param array $params the parameter array passed to the [[render()]] method.
* 参数数组传递到[render()]方法。
* @return boolean whether to continue rendering the view file. 是否继续渲染视图文件。
*/
public function beforeRender($viewFile, $params)
{
$event = new ViewEvent([//实例化ViewEvent
'viewFile' => $viewFile,
'params' => $params,
]);
$this->trigger(self::EVENT_BEFORE_RENDER, $event);//触发[EVENT_BEFORE_RENDER]事件 return $event->isValid;//判断是否继续渲染文件
} /**
* This method is invoked right after [[renderFile()]] renders a view file.
* The default implementation will trigger the [[EVENT_AFTER_RENDER]] event.
* 后置事件,在执行[renderFile()]方法后被调用,默认触发[[EVENT_AFTER_RENDER]]事件
* If you override this method, make sure you call the parent implementation first.
* @param string $viewFile the view file being rendered.要渲染的视图文件。
* @param array $params the parameter array passed to the [[render()]] method.
* 参数数组传递到[render()]方法。
* @param string $output the rendering result of the view file. Updates to this parameter
* will be passed back and returned by [[renderFile()]].
* 返回视图渲染的结果
*/
public function afterRender($viewFile, $params, &$output)
{
if ($this->hasEventHandlers(self::EVENT_AFTER_RENDER)) {//判断[EVENT_AFTER_RENDER]事件是否存在
$event = new ViewEvent([
'viewFile' => $viewFile,
'params' => $params,
'output' => $output,
]);
//触发[EVENT_AFTER_RENDER]事件
$this->trigger(self::EVENT_AFTER_RENDER, $event);
$output = $event->output;//返回结果
}
} /**
* Renders a view file as a PHP script.
* 返回一个视图文件当作PHP脚本
* This method treats the view file as a PHP script and includes the file.
* It extracts the given parameters and makes them available in the view file.
* The method captures the output of the included view file and returns it as a string.
* 将传入的参数转换为变量,包含并执行view文件,返回执行结果
* This method should mainly be called by view renderer or [[renderFile()]].
*
* @param string $_file_ the view file. 视图文件
* @param array $_params_ the parameters (name-value pairs) that will be extracted and made available in the view file.
* @return string the rendering result 执行结果
*/
public function renderPhpFile($_file_, $_params_ = [])
{
ob_start(); //打开输出缓冲
ob_implicit_flush(false); //关闭缓冲区
extract($_params_, EXTR_OVERWRITE);// 将一个数组转换为变量使用
require($_file_); return ob_get_clean();//得到缓冲区的内容并清除当前输出缓冲
} /**
* Renders dynamic content returned by the given PHP statements. 渲染动态内容
* This method is mainly used together with content caching (fragment caching and page caching)
* 用来聚合缓存的内容
* when some portions of the content (called *dynamic content*) should not be cached.
* The dynamic content must be returned by some PHP statements.
* 渲染某些被PHP语句返回的动态内容
* @param string $statements the PHP statements for generating the dynamic content.生成动态内容的PHP语句。
* @return string the placeholder of the dynamic content, or the dynamic content if there is no
* active content cache currently. 动态内容占位符 如果当前没有有效的内容缓存,调用evaluateDynamicContent输出
*/
public function renderDynamic($statements)
{
if (!empty($this->cacheStack)) {//动态内容的列表不为空
$n = count($this->dynamicPlaceholders);//统计动态内容条数
$placeholder = "<![CDATA[YII-DYNAMIC-$n]]>";//生成占位符
$this->addDynamicPlaceholder($placeholder, $statements);//添加动态内容占位符 return $placeholder;
} else {//没有有效缓存 执行传入的PHP语句,返回执行结果
return $this->evaluateDynamicContent($statements);
}
} /**
* Adds a placeholder for dynamic content. 添加一个动态内容占位符
* This method is internally used. 内部使用
* @param string $placeholder the placeholder name 占位符名称
* @param string $statements the PHP statements for generating the dynamic content
* 生成动态内容的PHP语句
*/
public function addDynamicPlaceholder($placeholder, $statements)
{
foreach ($this->cacheStack as $cache) {
$cache->dynamicPlaceholders[$placeholder] = $statements;//添加动态内容占位符
}
$this->dynamicPlaceholders[$placeholder] = $statements;//给当前视图添加动态内容占位符
} /**
* Evaluates the given PHP statements. 给定的PHP语句的值
* This method is mainly used internally to implement dynamic content feature.内部使用实现动态内容功能
* @param string $statements the PHP statements to be evaluated. PHP语句进行计算
* @return mixed the return value of the PHP statements. PHP语句的值
*/
public function evaluateDynamicContent($statements)
{
return eval($statements);
} /**
* Begins recording a block.
* This method is a shortcut to beginning [[Block]]
* 数据块开始的标记,该方法是开始[Block]的快捷方式
* 数据块可以在一个地方指定视图内容在另一个地方显示,通常和布局一起使用
* @param string $id the block ID. 数据块标识
* @param boolean $renderInPlace whether to render the block content in place. 是否渲染块内容。
* Defaults to false, meaning the captured block will not be displayed.
* @return Block the Block widget instance 数据块部件实例
*/
public function beginBlock($id, $renderInPlace = false)
{
return Block::begin([
'id' => $id,//数据块唯一标识
'renderInPlace' => $renderInPlace,//是否显示标识
'view' => $this,
]);
} /**
* Ends recording a block. 数据块结束标识
*/
public function endBlock()
{
Block::end();
} /**
* Begins the rendering of content that is to be decorated by the specified view.
* This method can be used to implement nested layout. For example, a layout can be embedded
* in another layout file specified as '@app/views/layouts/base.php' like the following:
* 开始指定的view渲染内容,用来实现嵌套布局,传入的第一个参数为布局文件的路径
* ~~~
* <?php $this->beginContent('@app/views/layouts/base.php'); ?>
* ...layout content here...
* <?php $this->endContent(); ?>
* ~~~
*
* @param string $viewFile the view file that will be used to decorate the content enclosed by this widget.
* This can be specified as either the view file path or path alias.布局文件的路径或路径别名。
* @param array $params the variables (name => value) to be extracted and made available in the decorative view.
* 可以在视图中运用的参数
* @return ContentDecorator the ContentDecorator widget instance 部件实例
* @see ContentDecorator
*/
public function beginContent($viewFile, $params = [])
{
return ContentDecorator::begin([
'viewFile' => $viewFile,
'params' => $params,
'view' => $this,
]);
} /**
* Ends the rendering of content.结束渲染内容
*/
public function endContent()
{
ContentDecorator::end();
} /**
* Begins fragment caching. 开始片段缓存
* This method will display cached content if it is available.
* If not, it will start caching and would expect an [[endCache()]]
* call to end the cache and save the content into cache.
* 展示可用的缓存内容,否则将开始缓存内容直到出现[endCache()]方法
* A typical usage of fragment caching is as follows,
*
* ~~~
* if ($this->beginCache($id)) {
* // ...generate content here
* $this->endCache();
* }
* ~~~
*
* @param string $id a unique ID identifying the fragment to be cached.缓存片段的唯一标识
* @param array $properties initial property values for [[FragmentCache]]初始属性[FragmentCache]
* @return boolean whether you should generate the content for caching. 是否生成缓存的内容。
* False if the cached version is available.
*/
public function beginCache($id, $properties = [])
{
$properties['id'] = $id; //片段标识
$properties['view'] = $this; //调用初始化属性
/* @var $cache FragmentCache */
$cache = FragmentCache::begin($properties);
if ($cache->getCachedContent() !== false) {
$this->endCache();//从缓存中读取到了缓存的内容,则渲染内容并返回 false,不再进行缓存 return false;
} else {
return true;
}
} /**
* Ends fragment caching. 结束片段缓存
*/
public function endCache()
{
FragmentCache::end();
} /**
* Marks the beginning of a page.页面开始标记
*/
public function beginPage()
{
ob_start(); //打开输出缓冲
ob_implicit_flush(false);//关闭缓冲区 $this->trigger(self::EVENT_BEGIN_PAGE);
} /**
* Marks the ending of a page. 页面结束标记
*/
public function endPage()
{
$this->trigger(self::EVENT_END_PAGE);
ob_end_flush();//关闭输出缓冲区
}

yii2源码学习笔记(十九)的更多相关文章

  1. yii2源码学习笔记(十四)

    Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * ...

  2. yii2源码学习笔记(十二)

    继续了解controller基类. /** * Runs a request specified in terms of a route.在路径中指定的请求. * The route can be e ...

  3. yii2源码学习笔记(十)

    继续了解Application. /** * Registers the errorHandler component as a PHP error handler. * 注册errorHandler ...

  4. yii2源码学习笔记(十六)

    Module类的最后代码 /** * Registers sub-modules in the current module. * 注册子模块到当前模块 * Each sub-module shoul ...

  5. yii2源码学习笔记(十五)

    这几天有点忙今天好些了,继续上次的module来吧 /** * Returns the directory that contains the controller classes according ...

  6. yii2源码学习笔记(九)

    Application是所有应用程序类的基类,接下来了解一下它的源码.yii2\base\Application.php. <?php /** * @link http://www.yiifra ...

  7. yii2源码学习笔记(八)

    Action是所有控制器的基类,接下来了解一下它的源码.yii2\base\Action.php <?php /** * @link http://www.yiiframework.com/ * ...

  8. 老刘 Yii2 源码学习笔记之 Action 类

    Action 的概述 InlineAction 就是内联动作,所谓的内联动作就是放到controller 里面的 actionXXX 这种 Action.customAction 就是独立动作,就是直 ...

  9. yii2源码学习笔记(二十)

    Widget类是所有部件的基类.yii2\base\Widget.php <?php /** * @link http://www.yiiframework.com/ * @copyright ...

随机推荐

  1. POJ3155 Hard Life

    Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 8482   Accepted: 2461 Case Time Limit:  ...

  2. 哪里有比较全的hadoop视频教程

    robby老师讲了套hadoop视频,讲的比的深入浅出,内容很丰富,把网盘下载地址提供给大家一下: 视频下载啦很大,有图有真相: 1,Hadoop介绍,HDFS和MapReduce工作原理:http: ...

  3. MySQL check the manual that corresponds to your MySQL server version for the right syntax错误

    地化GO的时候一直遇到一个错误就是check the manual that corresponds to your MySQL server version for the right syntax ...

  4. Redis作者谈Redis应用场景

    Redis作者谈Redis应用场景 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多 ...

  5. linux shell read command-Getting User Input Via Keyboard--ref

    ref:http://bash.cyberciti.biz/guide/Getting_User_Input_Via_Keyboard You can accept input from the ke ...

  6. jquery mobile跳转到指定id时怎样传递参数

    在jquery mobile 中,每一个页面都是一个page,当我们需要从一个页面跳转到另一个页面时,可以在href中指定id,可是该怎么把一个page中的参数传递到另外一个page中,几经琢磨,发现 ...

  7. last_9t's_ramsey

    cannot finish his face

  8. 【邮件】imap与pop3的区别

    文:铁乐猫 2015 10月14日 今天替一位在外出差的用户安装和设置完foxmail用于收发邮件,到下午被告知对方用foxmail发完邮件后,在网页上登录邮箱后并没有看到在foxmail中" ...

  9. MAC上搭建Jenkins + Android + IOS自动开发部署环境

    因为MAC是大小写不敏感的操作系统,很多Linux命令不支持,所以首先要创建大小写敏感的操作系统. 设置静态IP 打开"System Preferences..." 点击" ...

  10. html和css 基础梳理之一

    原图出处:http://www.cnblogs.com/jiasongmao/archive/2016/08/24/5804298.html