热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yii2视图与布局中各类函数的详细解析及其应用场景综述

本文详细解析了Yii2框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。

yii2布局文件里有很多函数,你是否研究过他们都是干嘛用的?这篇文章告诉你~

我们以安装完yii2程序后默认的布局为例说明

// @app/views/layouts/main.php

/* @var $this \yii\web\View */
/* @var $content string */

use yii\helpers\Html;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;

AppAsset::register($this);
?>
beginPage() ?>

language ?>">

    charset ?>">
    
    
    
    head() ?>


beginBody() ?>

© My Company

endBody() ?> endPage() ?>

首先要说的是,布局其实就是视图,一种特殊的视图而已,所以我们明说布局函数,实质在说视图类View。

我就是我 $this

既然是一种特殊的视图,所以布局里面的 $this 对象其实就是当前视图本身,这在默认布局的注释里已经说明。

/* @var $this \yii\web\View */
/* @var $content string */

所以我建议你在阅读本文的时候,打开yiiwebView源代码同步进行。

写啥是啥 $content

这是在布局文件里除了 $this 外的第二个变量,我们都知道布局就像一个容器一样将基础架构先画出来,然后想用此结构的视图直接使用就可以了,那么 $content 就是使用此布局的视图自己的内容。

开山函数 beginPage 和 endPage

记住,所有的HTML我们都应该包含在 beginPage 和 endPage 函数之间,它们代表一个页面的开始和结束。

之外它们还分别触发了下面的两个事件

View::EVENT_BEGIN_PAGE
View::EVENT_END_PAGE

如果你想统计视图页面内代码的渲染时间,可以在这两个事件上做做手脚。当然,endPage的作用要更加大,后面会单独拿出来说明。

资源在哪我说的算 head()

确切的说,该函数只是告诉了yii要将资源文件(比如js和css)放到页面的哪里,一般它在head标签内,如果你将它移到其他地方,你会发现将来页面的js文件和css文件等也转移了。

head有啥我来做 renderHeadHtml()

从名字你就可以知道,它负责将头部的一些代码渲染出来,比如js和css等文件的具体html标签,具体放哪?那必须是放到head()函数里指定的位置了,另外,这是一个protected类型方法,你不要想着能直接->就调用它,没门,它仅仅为View类的其他方法服务。

beginBody 和 endBody

这两个函数和 beginPage 和 endPage 有雷同的地方,就是做了两个标记,代表body的开始和结束,作为位置标签,另外也触发了两个事件

View::EVENT_BEGIN_BODY
View::EVENT_END_BODY

当然 endBody 和 endPage 一样,还有其他职责,放到最后说,你先了解他们代表开始和结束,同时触发事件即可。

中场总结

上面说了 head、beginBody、endBody 都具有标签的作用,View为其设计了3个常量作为代表,分别如下

PH_HEAD // $this->head()
PH_BODY_BEGIN // $this->beginBody()
PH_BODY_END // $this->endBody

根据我们上面的了解,先画一个图出来,看看布局的可视化样子。

// 我是图
$this->beginPage()
- 
-- 
$this->head() // PH_HEAD
-- 
-- 
$this->beginBody() // PH_BODY_BEGIN
$content
$this->endBody() // PH_BODY_END
-- 
- 
$this->endPage()

renderBodyBeginHtml 和 renderBodyEndHtml 函数

上面我们知道有一个叫做 renderHeadHtml 方法负责往 PH_HEAD 位置放资源文件,那么PH_BODY_BEGIN和PH_BODY_END 也应该同类待遇,renderBodyBeginHtml和renderBodyEndHtml就是干这个的。

而从代码来看 renderBodyBeginHtml 和 renderBodyEndHtml 做的事情和 renderHeadHtml 差不多,都是资源的具体代码话,你是否记得我们在兄弟连时候有一节( http://nai8.me/course-video.h... )说过关于asset资源类位置的问题(指定资源在页面的上部还是下部),对,renderBodyBeginHtml、renderBodyEndHtml 等就是做这个的。

我们分条说下

  • renderBodyBeginHtml渲染的是位置为 POS_BEGIN 的js文件

  • renderBodyEndHtml渲染的是位置为 POS_END、POS_READY、POS_LOAD的js文件

  • renderHeadHtml渲染的是位置为POS_HEAD的js文件和所有css文件(无位置功能)以及一些head的metaTags。

现在你明白了吧,到此刻,你知道了有三个函数负责三个位置的代码渲染,而这些渲染其实就是资源的代码实现。

再说endPage

到现在,万事俱备,但是东风在哪里?它就是endPage

看一部分endPage的源代码我们

echo strtr($content, [
    self::PH_HEAD => $this->renderHeadHtml(),
    self::PH_BODY_BEGIN => $this->renderBodyBeginHtml(),
    self::PH_BODY_END => $this->renderBodyEndHtml($ajaxMode),
]);

endPage活生生的实现了代码和位置之间的替换,说白了就是字符串替换。。。

当然,在View类里还有一些小方法,比如registerJs()、clear()等等,阿北相信当你了解了布局(视图)形成的流程后,这些很容易看懂,如果还不懂,请留言此贴问。

最后一个例子

如果我们把最后相应给客户的页面比作一栋大楼。那么看看角色的分类

  • 布局 代表大楼图纸(代表着一个框架)

  • 资源类 代表购物清单

  • View的三个render函数 代表具体的建筑工人,采购资源类,并放到大楼里。

  • endPage函数,就是售楼许可证,保证所有资源都到位。

  • 使用布局的视图 就是人,入驻大楼,没有视图的布局都是纸老虎。

(完)

更多yii2干货 http://nai8.me


以上所述就是小编给大家介绍的《yii2视图(布局)中各种函数总结报告及使用场景》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
author-avatar
_嗚啦啦900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有