- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Codeigniter 4.0-dev 版源码学习笔记之七—— View 视图
前言
CI 的 View 没有像 Laravel 等一些流行框架一样设计的那么重,有自己的一套模版机制,
CI 一直采用纯天然的 PHP 模板形式,纯天然的好处是不用再学习一套模板语言了,缺点
是不能用到一些便利的设计模式,比如不能使用继承布局等等,当然你也可以加第三方的视
图组件进来。
下面我们开始看源码,看源码,我们先从视图的调用开始。
视图的调用
CI 4 开始使用新的视图调用逻辑,不在是 load 形式,调用方式如下:
echo view (name);
可以看到是直接调用了一个 view 函数,这个函数我们既不需要提前 load ,在 construct
方法里也没看见 include 什么文件,同时,这个方法看起来又不属于控制器对象,那么它
是从哪里来的呢?
回到之前写的“之二——入口以及初始化操作”一节,里面提到了,在 bootstrap.php 74 行
(原始文件行号),require 了一下 BASEPATH.Common.php ,这个文件中定义了许
多辅助方法。 view 就是其中一个,该方法位于 system/common.php 中的 88 行(原始
文件行号)。下面把代码贴出来:
if (! function_exists(view))
{
function view (string $name, array $data = [], array $options =
[])
{
$renderer = Services::renderer();
$saveData = null;
if (array_key_exists(saveData, $options) $options[saveD
ata] === true )
{
$saveData = (bool)$options[saveData];
unset($options[saveData]);
}
return $renderer-setData($data, raw)
-render($name, $options, $saveData);
}
}
可以看到,这里调用了 Services 类的 renderer 静态方法。之后的 saveData 逻辑主要处
理多次调用 view 方法时是否共享视图变量以及最后把要传递给视图的数据变量通过
$renderer-setData 方法传递给 render ,最后又执行了 render 进行渲染视图。下面贴出
的是 Services::renderer() 源码(system/config/services.php:362 ):
public static function renderer($viewPath = APPPATH.Views/, $config
= null, $getShared = true)
{
if ($getShared)
{
return self ::getSharedInstance(renderer, $viewPath, $confi
g);
}
if (is_null($config))
{
$config = new \Config\View();
}
return new \CodeIgniter\View\View($config, $viewPath, self ::locat
or(true ), CI_DEBUG, self ::logger(true ));
}
可以看出, view 方法主要 new 了一个 CodeIgniterViewView 类,该类位于
/system/ViewView.php 下。
小结一下,给个分析过程图,以方便理解:
接下来就是我们的主角 View 了。
View 源码分析
按着以上图中流程,我们要看 View 类的三个关键方法,分别是 __construct 、setData 、
render 。
__
您可能关注的文档
最近下载
- 露天矿山岩质边坡工程设计规范(TCSRME 009-2021).pdf VIP
- 精品解析:2024年高中化学奥林匹克北京地区预选赛化学试题(解析版).docx VIP
- 国际音标练习(共52张).ppt VIP
- 部编版语文一年级上册教案-表格式(全册).pdf VIP
- 射血分数保留的心力衰竭诊断与治疗中国专家共识2025要点 .pdf VIP
- 2024年一级注册计量师考试题目解析.docx VIP
- 《新生儿高氨血症诊断与治疗的专家共识》解读PPT课件.pptx VIP
- 初中语文讲座:《素养导向初中语文大单元教学》课件.pdf
- 2019年阅兵PPT课件教学课件.pptx VIP
- 2025杭州电力设备制造有限公司招聘70人(第二批)笔试模拟试题及答案解析.docx VIP
文档评论(0)