Yii源码阅读笔记(十七)
View.php,继承了component,用于渲染视图文件:
namespace yii\base; use Yii; use yii\helpers\FileHelper; use yii\widgets\Block; use yii\widgets\ContentDecorator; use yii\widgets\FragmentCache; /** * View represents a view object in the MVC pattern. * * View provides a set of methods (e.g. [[render()]]) for rendering purpose. * 视图提供了一套渲染页面的方法(例如[render()]) * * @property string|boolean $viewFile The view file currently being rendered. False if no view file is being * rendered. This property is read-only. * * @author Qiang Xue <qiang.xue@gmail.com> * @since 2.0 */ class View extends Component { /** * @event Event an event that is triggered by [[beginPage()]]. * beginPage事件名常量,被[beginPage()]触发 */ const EVENT_BEGIN_PAGE = 'beginPage'; /** * @event Event an event that is triggered by [[endPage()]]. * endPage事件名常量,被[endPage()]触发 */ const EVENT_END_PAGE = 'endPage'; /** * @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file. * beforeRender事件名常量,被[renderFile()]触发 */ const EVENT_BEFORE_RENDER = 'beforeRender'; /** * @event ViewEvent an event that is triggered by [[renderFile()]] right after it renders a view file. * afterRender事件名常量,被[renderFile()]触发 */ const EVENT_AFTER_RENDER = 'afterRender'; /** * @var ViewContextInterface the context under which the [[renderFile()]] method is being invoked. */ public $context; /** * @var mixed custom parameters that are shared among view templates. * 在视图模板中共享的自定义参数 */ public $params = []; /** * @var array a list of available renderers indexed by their corresponding supported file extensions. * Each renderer may be a view renderer object or the configuration for creating the renderer object. * 一个可用的渲染索引列表。每个渲染器是一个渲染器对象或创建渲染对象配置数组 * For example, the following configuration enables both Smarty and Twig view renderers: * 下面的配置数组同时支持 Smarty 和 Twig * * ```php * [ * 'tpl' => ['class' => 'yii\smarty\ViewRenderer'], * 'twig' => ['class' => 'yii\twig\ViewRenderer'], * ] * ``` * * If no renderer is available for the given view file, the view file will be treated as a normal PHP * and rendered via [[renderPhpFile()]]. * 如果没有值,则 */ public $renderers; /** * @var string the default view file extension. This will be appended to view file names if they don't have file extensions. * 默认视图文件扩展名,在视图文件没有扩展名的情况下自动添加 */ public $defaultExtension = 'php'; /** * @var Theme|array|string the theme object or the configuration for creating the theme object. * If not set, it means theming is not enabled. * 主题对象或创建主题对象的配置 */ public $theme; /** * @var array a list of named output blocks. The keys are the block names and the values * are the corresponding block content. You can call [[beginBlock()]] and [[endBlock()]] * to capture small fragments of a view. They can be later accessed somewhere else * through this property. * 一个输出块列表。键是块名称值为相应的块内容。你可以调用 [ beginblock() ]和[ endblock() ]捕获视图的small fragments * 它们可以在其他地方通过这个属性访问。 */ public $blocks; /** * @var array a list of currently active fragment cache widgets. This property * is used internally to implement the content caching feature. Do not modify it directly. * 当前active fragment缓存小部件的列表。此属性用于内部实现内容缓存功能。不要直接修改它。 * @internal */ public $cacheStack = []; /** * @var array a list of placeholders for embedding dynamic contents. This property * is used internally to implement the content caching feature. Do not modify it directly. * 一种嵌入动态内容占位符列表。此属性用于内部实现内容缓存功能。不要直接修改它。 * @internal */ public $dynamicPlaceholders = []; /** * @var array the view files currently being rendered. There may be multiple view files being * rendered at a moment because one view may be rendered within another. * 目前正在渲染的视图文件。可能有多个视图文件被渲染,因为一个视图可以在另一个视图中呈现 */ private $_viewFiles = []; /** * Initializes the view component. * 初始化视图组件 */ public function init() { parent::init();//调用父类的init方法 if (is_array($this->theme)) {//如果theme是数组 if (!isset($this->theme['class'])) {//且没有设置类名 $this->theme['class'] = 'yii\base\Theme';//则类名为'yii\base\Theme' } //以配置的形式创建对象 $this->theme = Yii::createObject($this->theme); } elseif (is_string($this->theme)) {//否则以字符串参数的形式创建 $this->theme = Yii::createObject($this->theme); } } /** * Renders a view. * 渲染一个视图 * The view to be rendered can be specified in one of the following formats: * 被渲染的视图可以用下列方式指定 * * - path alias (e.g. "@app/views/site/index"); * 路径别名 * - absolute path within application (e.g. "//site/index"): the view name starts with double slashes. * The actual view file will be looked for under the [[Application::viewPath|view path]] of the application. * 绝对路径,将会在[Application::viewPath|view path]下查找文件 * - absolute path within current module (e.g. "/site/index"): the view name starts with a single slash. * The actual view file will be looked for under the [[Module::viewPath|view path]] of the [[Controller::module|current module]]. * 模块下的绝对路径,将会在[Module::viewPath|view path]下查找文件 * - relative view (e.g. "index"): the view name does not start with `@` or `/`. The corresponding view file will be * looked for under the [[ViewContextInterface::getViewPath()|view path]] of the view `$context`. * 相对路径,将会在[ViewContextInterface::getViewPath()|view path]下查找文件 * If `$context` is not given, it will be looked for under the directory containing the view currently * being rendered (i.e., this happens when rendering a view within another view). * * @param string $view the view name. * @param array $params the parameters (name-value pairs) that will be extracted and made available in the view file. * @param object $context the context to be assigned to the view and can later be accessed via [[context]] * in the view. If the context implements [[ViewContextInterface]], it may also be used to locate * the view file corresponding to a relative view name. * @return string the rendering result * @throws InvalidParamException if the view cannot be resolved or the view file does not exist. * @see renderFile() */ public function render($view, $params = [], $context = null) { //查找视图文件路径 $viewFile = $this->findViewFile($view, $context); //调用renderFile()渲染视图文件 return $this->renderFile($viewFile, $params, $context); }
Yii源码阅读笔记(十七)的更多相关文章
- Yii源码阅读笔记(一)
今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格.在此记录一下阅读中的小心得. 每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于we ...
- Yii源码阅读笔记(二十七)
Theme 类,即一个应用的主题,主要通过替换路径实现主题的应用,里边的方法为获取根路径和根链接,以及应用主题的方法: namespace yii\base; use Yii; use yii\hel ...
- Yii源码阅读笔记(八)
前面阅读了Yii2的两个基本类Object和Component,了解了Yii的三个重要概念属性.事件.行为,下面开始阅读Event类,Event类是所有事件类的基类: <?php /** * @ ...
- Yii源码阅读笔记(三)
接着上次的继续阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— public static function getRootAlias($alias)// ...
- Yii源码阅读笔记(二)
接下来阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— namespace yii; use yii\base\InvalidConfigExceptio ...
- Yii源码阅读笔记(三十五)
Container,用于动态地创建.注入依赖单元,映射依赖关系等功能,减少了许多代码量,降低代码耦合程度,提高项目的可维护性. namespace yii\di; use ReflectionClas ...
- Yii源码阅读笔记(三十四)
Instance类, 表示依赖注入容器或服务定位器中对某一个对象的引用 namespace yii\di; use Yii; use yii\base\InvalidConfigException; ...
- Yii源码阅读笔记(三十三)
ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...
- Yii源码阅读笔记(三十二)
web/Application类的注释,继承base/Application类,针对web应用的一些处理: namespace yii\web; use Yii; use yii\base\Inval ...
随机推荐
- 使用ASP.NET Web API自带的类库实现对CORS的支持(在开发中使用这种方式)(转载)
在<通过扩展让ASP.NET Web API支持W3C的CORS规范>中我们通过自定义的HttpMessageHandler为ASP.NET Web API赋予了跨域资源共享的能力,具体来 ...
- 在windows下用toolbox玩会docker
哈哈哈.
- Xamarin Studio支持TypeScript开发
之前谈到"TypeScript的崛起",今天推荐的文章又再次支持了这一观点--Xamarin Studio也开始支持TypeScript的开发. 一个语言是否能够崛起,很重要的一个 ...
- hdu 4586 Play the Dice 概率推导题
A - Play the DiceTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- JeeWx 微信管家平台
.平台简介 Jeewx是一款开源.免费的微信管家系统(多触点管理平台),2014年荣获CSDN开发商大会第一名.采用JAVA语言,支持微信公众号.微信企业号.支付宝服务窗等多触点管理.Jeewx实现了 ...
- android 完美退出所有Activity的demo
项目地址:https://github.com/libill/myapplication 利用android的wheel和参考android完美退出程序做出来的demo,结束掉所有打开的Activit ...
- 分享Kali Linux 2016.2最新镜像201609
分享Kali Linux 2016.2最新镜像20160919 Kali Linux官方继9月9日发布Kali Linux 2016.2的第36周镜像W36后,9月19日发布了Kali Linux ...
- eBay 使用ReviseInventoryStatusCall调整库存和价格
1.简介 针对Fixed-Price的Item,其Inventory Revise和Price Revise可以使用接口ReviseInventoryStatusCall来完成. 其使用非 ...
- 什么是 IntentService
service 默认也运行在 UI 线程,所以里面不能直接做耗时操作,要做耗时操作还得开启子线程来做. IntentService 就是一个 Service, 只不过里面给你默认开启了一个子线程来处理 ...
- 2015ACM/ICPC亚洲区长春站 J hdu 5536 Chip Factory
Chip Factory Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...