首页 理论教育PHPMVC开发实战:项目空控制器与控制器空动作的实现

PHPMVC开发实战:项目空控制器与控制器空动作的实现

【摘要】:在ThinkPHP中,开发人员还可以利用空控制器与空动作实现错误404的功能。当然,空控制器与空动作是不能代替服务器的错误页面处理机制的。下面在将分别介绍空控制器与空动作。但Index控制器中并不存在user动作,那么只需要在Index控制器中加入空动作,系统就会把_emtpy动作代替user动作。

在一些网站中,我们经常看到当访问一些不存在或者过期的网页时,就会弹出友好的提示说明。这是利用Web服务器的404错误处理机制实现的,所有主流的Web服务器都提供了这项功能。在ThinkPHP中,开发人员还可以利用空控制器与空动作实现错误404的功能。不仅如此,空控制器与空动作更加灵活,因为它也是一个真实的实例类和方法,能够实现MVC所有的功能,例如在错误出现时可以将错误信息插入数据库,提供个性化的提示等。

当然,空控制器与空动作是不能代替服务器的错误页面处理机制的。空控制器与空动作只能处理MVC框架内的页面,不能处理框架之外的页面。空控制器与空动作不能处理URL REWRITE自定义格式的页面。下面在将分别介绍空控制器与空动作。

1.空控制器

当用户所访问的URL不存在需要访问的控制器时,空控制器就派上用场了。假设用户访问的URL为http://tp.localhost/index.php/bbs,但该项目内并不存在BbsAction控制器,那么系统将会给出错误提示,如图6-2所示。

978-7-111-42852-7-Part02-131.jpg

图6-2 控制器不存在提示

需要注意的是,在调试时务必开启调试模式(即在入口文件中定义define("APP_DEBUG",true)),否则只会呈现一片空白。如图6-2所示,信息提示Bbs模块(控制器)并不存在,项目停止执行。接下来在项目Lib/Action目录下创建EmptyAction.class.php控制器类文件,如以下代码所示。(www.chuimin.cn)

978-7-111-42852-7-Part02-132.jpg

再次访问http://tp.localhost/index.php/bbs网址,系统将会直接调用Empty控制器。开发人员完全可以在空控制器中定义更多的私有成员方法,实现功能强大的自定义404信息提示。

2.空动作

空动作(_emtpy)与空控制器一样,都是系统为了避免URL异常而设计的。与空控制器定位到栏目(分类)不一样,空动作将定位到具体的页面,比如用户需要访问http://tp.localhost/index/user.htm(使用REWRITE URL模式,相当于http://tp.localhost/index.php/index/user)。但Index控制器中并不存在user动作,那么只需要在Index控制器中加入空动作,系统就会把_emtpy动作代替user动作。如以下代码所示。

978-7-111-42852-7-Part02-133.jpg