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文件中,必须包含
语句,这个语句会读取view/layout/controllername.html,并把其内容嵌入在这句代码所在的位置,而在view/layout/controllername.html文件中,也必须包含
就是说通过view/index.html提供了页面的基本布局,在view/layout/controllername.html中提供了子布局,最终把Action要呈现的内容嵌入在子布局中。通过这种机制不仅省却了大量重复的布局代码,更重要的是会保证整个站点在呈现格式上的一致。
如果需要在布局上做局部调整,或者需要在页面设计中对不同的部分进行分工设计,还可以使用部分式方法
代码会读取view目录下的对应文件,文件的扩展名默认是html,如果注册了模板解析引擎,那么会按照注册的顺序去读取对应的扩展名
实际开发中,很有可能会需要传递变量给View,以生成不同的页面内容,传递的方法是在Controller/Action中使用
然后在视图文件中嵌入对应的代码,就可以根据var_value生成不同的页面
理论上将,一段代码不管是嵌入在Model里,Controller/Action里,还是View里最终都能执行,不过从软件工程考虑,各个不同部分最好还是负责不同的工作,传入到View中的值,最好只和View的生成有关,以便美工在设计页面时不必费心考虑后台程序的逻辑。
输出非默认视图。有时候让美工根据传入的值来设计页面会有比较大的问题,比如说要判断登录用户的身份以输出特定的页面,前台和后台的页面差异极大,如果让美工在一个视图文件中提供两种输出就不太合适。这个时候有两个备选方案,一个是跳转,还有一个是使用非默认视图。跳转的使用在分发器部分再详细说明,这里就说明使用非默认视图。
默认情况下,Phalcon会寻找view/controllername/actionname.html作为输出的默认视图,如果开发者希望输出其他视图,则可以在Action代码中嵌入
更多的视图使用,也可以参考官方文档
https://docs.phalconphp.com/en/latest/reference/views.html
其中介绍了渲染级别,有些比较高明的使用技巧;视图缓存对网站的响应速度比较重要。而模板的使用仅仅介绍了如何在模板引擎中使用一些主流模板,对于模板的具体使用着墨不多。
在目录结构与命名约定中,已经说明了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
其中介绍了渲染级别,有些比较高明的使用技巧;视图缓存对网站的响应速度比较重要。而模板的使用仅仅介绍了如何在模板引擎中使用一些主流模板,对于模板的具体使用着墨不多。
相关文章推荐
- LAMP下安装phalcon
- Phalcon学习笔记(3)目录结构与命名约定
- Phalcon学习笔记(2)DI依赖注入器和加载器
- Phalcon 扩展安装,测试
- Phalcon 常用函数 方法
- PHP调用google translate中解决中文返回乱码
- Phalcon框架在读取和写入数据库时产生中文乱码
- Phalcon笔记学习笔记
- phalcon学习笔记
- phalcon使用经验杂谈
- phalcon 一些开发注意事项和redis配置
- centos linux phalcon扩展
- [Phalcon]请求volt与请求json的性能压测对比
- 【Phalcon】路由拆分
- 【Phalcon】Hello Phalcon!
- php常用框架压力测试
- 欢迎使用CSDN-markdown编辑器
- Phalcon 学习笔记
- 【Phalcon】Phalcon多平台的安装配置
- 【Phalcon实现高性能接口开发】使用Phalcon高性能PHP框架搭建API MVC架构之实现查询版本的接口