View中应用布局和缓存内容部分:

   /**
      * 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,//是否显示标记,默认false不显示
             '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.
      * 开始用指定的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:
      *
      * ```php
      * <?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 string $viewFile 布局文件
      * @param array $params the variables (name => value) to be extracted and made available in the decorative view.
      * @param array $params 布局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.
      * 该方法将展示可用的缓存内容,否则将开始缓存内容直到出现[endCache()]方法
      * If not, it will start caching and would expect an [[endCache()]]
      * call to end the cache and save the content into cache.
      * A typical usage of fragment caching is as follows,
      * 使用缓存的典型例子如下:
      * ```php
      * 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]]
      * @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) {//如果从缓存中读取到了缓存的内容,则渲染内容并返回 false,因此将跳过内容生成逻辑,不再进行缓存
             $this->endCache();

             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();
     }

Yii源码阅读笔记(二十)的更多相关文章

  1. Yii源码阅读笔记(十二)

    Action类,控制器中方法的基类: namespace yii\base; use Yii; /** * Action is the base class for all controller ac ...

  2. Yii源码阅读笔记(十八)

    View中的查找视图文件方法和渲染文件方法 /** * Finds the view file based on the given view name. * 通过view文件名查找view文件 * ...

  3. Yii源码阅读笔记(十五)

    Model类,集中整个应用的数据和业务逻辑——验证 /** * Returns the attribute labels. * 返回属性的标签 * * Attribute labels are mai ...

  4. Yii源码阅读笔记(十六)

    Model类,集中整个应用的数据和业务逻辑—— /** * Generates a user friendly attribute label based on the give attribute ...

  5. Yii源码阅读笔记(十四)

    Model类,集中整个应用的数据和业务逻辑——场景.属性和标签: /** * Returns a list of scenarios and the corresponding active attr ...

  6. Yii源码阅读笔记(十)

    控制器类,所有控制器的基类,用于调用模型和布局,输出到视图 namespace yii\base; use Yii; /** * Controller is the base class for cl ...

  7. Yii源码阅读笔记(十九)

    View中渲染view视图文件的前置和后置方法,以及渲染动态内容的方法: /** * @return string|boolean the view file currently being rend ...

  8. Yii源码阅读笔记(一)

    今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格.在此记录一下阅读中的小心得. 每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于we ...

  9. werkzeug源码阅读笔记(二) 下

    wsgi.py----第二部分 pop_path_info()函数 先测试一下这个函数的作用: >>> from werkzeug.wsgi import pop_path_info ...

  10. werkzeug源码阅读笔记(二) 上

    因为第一部分是关于初始化的部分的,我就没有发布出来~ wsgi.py----第一部分 在分析这个模块之前, 需要了解一下WSGI, 大致了解了之后再继续~ get_current_url()函数 很明 ...

随机推荐

  1. Virtual Box创建共享目录

    1.先关闭ubuntu,在virtualbox“设置”中找到“共享文件夹”,点击进入,点击右边添加目录按钮,添加windows中要共享的目录,取一个名.比如我在D盘建一个名为share的文件夹,如下图 ...

  2. aidl 中通过RemoteCallbackList 运用到的回调机制: service回调activity的方法

    说明:我没有写实例代码,直接拿项目中的代码,有点懒了,这里我省略贴出两个aidl文件. TtsService extends Service private final RemoteCallbackL ...

  3. php短信发送

    <?php   ) {             );         curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_content);         cu ...

  4. HTML <img> 标签的 height 和 width 属性

    定义和用法 <img> 标签的 height 和 width 属性设置图像的尺寸. 提示:为图像指定 height 和 width 属性是一个好习惯.如果设置了这些属性,就可以在页面加载时 ...

  5. Oracle 11g必须开启的服务及服务详细介绍(转)

    成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通过禁止非必须开启的Oracle服务可以提升电脑的运行速度.那么,具体该怎么做呢? 按照win ...

  6. 常用的 Python 爬虫技巧总结

    用python也差不多一年多了,python应用最多的场景还是web快速开发.爬虫.自动化运维:写过简单网站.写过自动发帖脚本.写过收发邮件脚本.写过简单验证码识别脚本. 爬虫在开发过程中也有很多复用 ...

  7. Hark的数据结构与算法练习之快速排序

    前言 快速排序是最常见,也是面试中最容易考的排序方法,这里做一下总结 算法说明 其实这里说的很清楚了:http://blog.csdn.net/morewindows/article/details/ ...

  8. nginx查看post请求日志

    在http段加上 log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $ ...

  9. Source insight怎样恢复默认界面布局 窗口嵌入

    先关闭,然后在c盘的文档的Source Insight\Settings目录里面,将CF3文件剪切到别的地方,再打开 不过有些其它设置也会丢失,需要重新设置,参见Source_Insight破解版下载 ...

  10. Android 编程下设置 Activity 切换动画

    为 Activity 设置切换动画 我们知道,我们可以在 AndroidManifest.xml 文件中,通过 android:theme 属性设置 Activity 的主题.主题中定义了关于 Act ...