在ThinkPHP中,开发人员还可以利用空控制器与空动作实现错误404的功能。当然,空控制器与空动作是不能代替服务器的错误页面处理机制的。下面在将分别介绍空控制器与空动作。但Index控制器中并不存在user动作,那么只需要在Index控制器中加入空动作,系统就会把_emtpy动作代替user动作。......
2023-11-04
动作是控制器的具体行为,一个没有动作的控制器是没任何意义的。任何需要输出到视图中的数据都必须由动作完成。默认情况下,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等文件,如以下代码所示。
有关PHP MVC开发实战的文章
在ThinkPHP中,开发人员还可以利用空控制器与空动作实现错误404的功能。当然,空控制器与空动作是不能代替服务器的错误页面处理机制的。下面在将分别介绍空控制器与空动作。但Index控制器中并不存在user动作,那么只需要在Index控制器中加入空动作,系统就会把_emtpy动作代替user动作。......
2023-11-04
在ThinkPHP中,控制器是允许互相调用的。大体上可分为两种调用方式:一种为当前项目控制之间的调用;另一种为跨项目的控制器调用。为了便于使用,系统还提供2个快捷函数处理控制器的调用,下面结合示例代码分别介绍这2个快捷函数的使用方式。此外,如果项目使用模块分组方式,需要在控制器前加上“/”分隔符,跨项目控制器的调用方式如以下代码所示。上述代码表示实例化Admin项目下的Member控制器,然后调用user动作。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
下面通过示例代码,演示Cookie函数的实际应用。Cookie能够存放包括中文在内的字符,但长度需要控制在225个字符之内。通过前面的学习,相信读者已经能够掌握Session及Cookie的操作了。虽然Cookie存放于客户端,但是并不意味着Cookie不适合用于会员验证等场景。所以很多网站会使用加密的方式存放Cookie用户名及密码,甚至结合软件与硬件签名实现高度安全的Cookie。总而言之,使用Cookie存放登录数据是可行的,但要做好加密与解密相关操作。......
2023-11-04
Eclipse是IBM的一个商业项目,2001年11月起IBM将Eclipse贡献给开源社区,从此奠定了Eclipse的地位。Eclipse通过PDT插件来提供PHP开发支持,Eclipse PDT能够让编写PHP变得简单和高效,下面将介绍Eclipse PDT的安装和使用。Eclipse PDT的安装有两种方式,一种是直接通过Eclipse的扩展进行安装;另一种是下载带PDT插件的Eclipse。下面将以Eclipse3.5.2作为基础,讲解Eclipse PDT插件的安装过程。如果下载带PDT插件的Eclipse,只需要双击Eclipse启动程序即可,此时Eclipse就提供了完美的PHP编程支持。......
2023-11-04
图12-2 SOAP服务如果服务没有开启,需要在PHP配置文件中开启,如以下代码所示。其中参数1表示SOA服务描述文件,即WSDL文件,该文件是SOAP通信的核心;参数2表示SOAP协议版本,常用的版本有1.0及1.2,本章内容及示例全部基于SOAP 1.2版本实现。使用普通的Firebug等插件不能获取到异常信息,而断点调试是PHP的弱项,所以调试问题将会是SOAP开发首要面对的问题。......
2023-11-04
相关推荐