Phalcon学习笔记(4)视图入门

MVC架构中,一般认为View不如另两个有技术含量,不过本笔记是给初学者看的,所以笔者坚持从最简单的写起,只要学会了视图的使用,就可以写一些简单的东西了。这有助于初学者迈过第一道门槛,增强学习的信心。


在目录结构与命名约定中,已经说明了View的最基本用法。


首先在视图目录下会有子目录,每个子目录的命名必须要和Controller的命名一致,如果是xxxController.php,那么对应的视图目录名是xxx,如果是yyyController.php,那么对应的目录名是yyy。


然后每个子目录里会有不同的视图文件,每个文件对应不同的Action,比如aaaAction()对应的视图文件是aaa.html,bbbAction()对应的视图文件是bbb.html,对于Action可能会传入的参数,并没有对应的视图文件,这需要在程序中处理,一般来讲都会在视图文件中嵌入一些代码来专门处理传入的参数。


在视图目录下还有一个index.html的文件,在视图目录下还有一个layout文件夹,这个文件夹是Phalcon保留的,不可以对应Controller。


实际上在view/index.html文件中,必须包含

<?php echo $this->getContent() ?>

语句,这个语句会读取view/layout/controllername.html,并把其内容嵌入在这句代码所在的位置,而在view/layout/controllername.html文件中,也必须包含

<?php echo $this->getContent() ?>
这句代码,这个语句会读取view/controllername/actionname.html文件,并把其内容嵌入在这句代码所在的位置


就是说通过view/index.html提供了页面的基本布局,在view/layout/controllername.html中提供了子布局,最终把Action要呈现的内容嵌入在子布局中。通过这种机制不仅省却了大量重复的布局代码,更重要的是会保证整个站点在呈现格式上的一致。


如果需要在布局上做局部调整,或者需要在页面设计中对不同的部分进行分工设计,还可以使用部分式方法

<?php $this->partial("shared/ad_banner") ?>

<h1>Robots</h1>

<p>Check out our specials for robots:</p>
...

<?php $this->partial("shared/footer") ?>

代码会读取view目录下的对应文件,文件的扩展名默认是html,如果注册了模板解析引擎,那么会按照注册的顺序去读取对应的扩展名


实际开发中,很有可能会需要传递变量给View,以生成不同的页面内容,传递的方法是在Controller/Action中使用

$this->view->setVar("var_name", var_value);
当用户通过URL访问Controller/Action时,变量var_name的值就会被设置为var_value并传递给视图文件。


然后在视图文件中嵌入对应的代码,就可以根据var_value生成不同的页面

for ($n=0; $n<$var_name; ++$n)
  {
    echo "<h1>", $n, "</h1>";
  }
这里演示的是php原生代码,如果开发者使用Volt或者其他模板,也可以。


理论上将,一段代码不管是嵌入在Model里,Controller/Action里,还是View里最终都能执行,不过从软件工程考虑,各个不同部分最好还是负责不同的工作,传入到View中的值,最好只和View的生成有关,以便美工在设计页面时不必费心考虑后台程序的逻辑。


输出非默认视图。有时候让美工根据传入的值来设计页面会有比较大的问题,比如说要判断登录用户的身份以输出特定的页面,前台和后台的页面差异极大,如果让美工在一个视图文件中提供两种输出就不太合适。这个时候有两个备选方案,一个是跳转,还有一个是使用非默认视图。跳转的使用在分发器部分再详细说明,这里就说明使用非默认视图。


默认情况下,Phalcon会寻找view/controllername/actionname.html作为输出的默认视图,如果开发者希望输出其他视图,则可以在Action代码中嵌入

$this->view->pick("other/someview");
以输出特定的视图。使用跳转还是使用非默认视图要看具体的应用需求。


更多的视图使用,也可以参考官方文档

https://docs.phalconphp.com/en/latest/reference/views.html


其中介绍了渲染级别,有些比较高明的使用技巧;视图缓存对网站的响应速度比较重要。而模板的使用仅仅介绍了如何在模板引擎中使用一些主流模板,对于模板的具体使用着墨不多。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值