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. LeetCode之Min Stack 实现最小栈

    LeetCode相关的网上资源比较多,看到题目一定要自己做一遍,然后去学习参考其他的解法. 链接: https://oj.leetcode.com/problems/min-stack/ 题目描述: ...

  2. Java Hour 54 Spring Framework 1

    总之,Srping Framework 很好很强大. 1 Spring Framework 介绍 省下你和transcation APIs, JMX APIs, JMS APIs 交流的功夫. 1.1 ...

  3. Hierachy Viewer 使用 monitor命令

    使用 Hierachy Viewer 可视化调试工具 Hierachy Viewer 能很方便地在开发者设计,调试和调整界面时,快速定位问题,解决问题,提高开发效率. Hierarchy Viewer ...

  4. Sql server之路 (一)基础学习

    查询 1.Select * from表名 2.Select 字段1,字段2,from表名 3.Select 字段1,字段2,...from表名 where 字段1 in('内容') 插入 1.inse ...

  5. hdu 5312 数学

  6. CPU的性能对比

    笔记本CPU之前的性能对比 下面的分数都是根据PerformanceTest测试的出来的结果,现在的笔记本CPU有很多种,你在购买笔记本的时候只看到CPU的型号,而且现在的CPU型号太多而且命名方式也 ...

  7. ER-STUDIO 6.5工具使用帮助的中文翻译

    转自于:http://yujingwang.blog.sohu.com/63362979.html 1       资料 ER-STUDIO的帮助(英文) 2       内容 2.1         ...

  8. 建模算法(六)——神经网络模型

    (一)神经网络简介 主要是利用计算机的计算能力,对大量的样本进行拟合,最终得到一个我们想要的结果,结果通过0-1编码,这样就OK啦 (二)人工神经网络模型 一.基本单元的三个基本要素 1.一组连接(输 ...

  9. 编译fdk-aac for ios

    Build all: build-fdk-aac.sh Build for some architectures: build-fdk-aac.sh armv7s x86_64 Build unive ...

  10. Codeforces Round #292 (Div. 2)

    A. Drazil and Date 无算法,判断(s - (a + b)) % 2是否为零,若零,表示在s步内还能走向其他的地方并且回来 否则,都是No #include <cstdio> ...