您的位置:首页 > 其它

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

2015-06-15 10:02 267 查看
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
其中介绍了渲染级别,有些比较高明的使用技巧;视图缓存对网站的响应速度比较重要。而模板的使用仅仅介绍了如何在模板引擎中使用一些主流模板,对于模板的具体使用着墨不多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Phalcon