首页 理论教育PHPMVC开发实战:控制器中的动作

PHPMVC开发实战:控制器中的动作

【摘要】:ThinkPHP的动作和一个普通的PHP类方法并没有多大区别,它能够直接输出信息,不需要借助模板,也不需要分配变量,开发人员可以使用标准的PHP代码输出HTML等信息。动作的设计原则是用来做逻辑运算,所以应尽量避免在动作中混入HTML等非PHP代码,Action基类本身提供了display方法,用于结果输出。

动作是控制器的具体行为,一个没有动作的控制器是没任何意义的。任何需要输出到视图中的数据都必须由动作完成。默认情况下,ThinkPHP会生成Index控制器和Index动作,在动作中只需要成功提示信息,如以下代码所示。

默认生成的index动作是没有任何意义的。使用过Symfony或者CakePHP等框架的读者,也许已经感觉到了ThinkPHP对动作处理的灵活性。ThinkPHP的动作和一个普通的PHP类方法并没有多大区别,它能够直接输出信息,不需要借助模板,也不需要分配变量,开发人员可以使用标准的PHP代码输出HTML等信息(Action类也提供了show方法用于直接输出)。

尽管ThinkPHP允许直接在动作中输出信息,但这并不是一个好的编程方式。动作的设计原则是用来做逻辑运算,所以应尽量避免在动作中混入HTML等非PHP代码,Action基类本身提供了display方法,用于结果输出。如以下代码所示。

display是View视图引擎中一个好用和高效的成员方法,在Action类中已经对display进行了封装,使得display能够智能地解释当前动作视图模板,并将PHP变量、数组等信息输出到目标文件中。display支持3种高效的模板处理方式,下面分别进行介绍。

1.调用当前控制器其他动作模板

默认情况下,display会查找当前动作对应的模板,当然也可以手动指定需要解释的模板,如以下代码所示。

手动指定视图模板时只需要模板名称,不需要模板文件后缀(默认情况下所有的模板文件都是以.html作为后缀)。上述代码使用home模板,该模板必须位于当前控制器模板目录中(即Tpl/Index/home.html)。通过这种方式可以实现访问不同动作呈现相同模板,但不同结果的效果,所以home.html文件也是可选的。(www.chuimin.cn)

2.调用其他控制器动作模板

在ThinkPHP模板方案中,一个控制器对应的模板方案就是一个分类(即一个文件夹),由于跨控制器调用就意味着跨文件夹读取模板。所以在使用display解释模板时,需要使用“:”分隔符,才能跨文件夹解释,如以下代码所示。

这里所指的其他控制器是指当前项目下的控制器,如果存在多个项目,虽然display也能够支持跨项目调用,但这会造成项目结构的混乱,降低代码可读性,所以并不建议跨项目调用。

3.直接输出模板文件

display还能够支持直接输出一个静态文件,直接输出文件不受ThinkPHP内置的模板目录处理方式限制,只要给出相应的模板文件路径,display就能够将该文件进行解释。需要注意的是,直接输出模板中的文件必须为当前网站内的文件,而不能是远程文件,如以下代码所示。

通过前面的内容介绍,可以看到display足够灵活和强大,能够满足多数项目开发的需求。Display不仅能够支持输出HTML网页,通过第3个参数还能够输出XML、WML等文件,如以下代码所示。