ThinkPHP - 空模块+空操作

本文介绍了PHP框架中空操作和空模块的概念及其应用。通过空操作可以实现URL的优化和错误页面的定制,而空模块则能简化URL结构,减少Action类的定义。结合二者,可完成更复杂的任务。

空操作

空操作是指系统在找不到指定的操作方法的时候,
会定位到空操作(_empty)方法来执行,利用这个机制,
我们可以实现错误页面和一些URL的优化。

例如,下面我们用空操作功能来实现一个城市切换的功能。
我们只需要给CityAction类定义一个_empty (空操作)方法:

<?php
class CityAction extends Action{
    public function _empty($name){
        //把所有城市的操作解析到city方法
        $this->city($name);
    }
    
    //注意 city方法 本身是 protected 方法
    protected function city($name){
        //和$name这个城市相关的处理
         echo '当前城市' . $name;
    }
}

 
接下来,我们就可以在浏览器里面输入

http://serverName/index.php/City/beijing/
http://serverName/index.php/City/shanghai/
http://serverName/index.php/City/shenzhen/

由于CityAction并没有定义beijing、shanghai或者shenzhen操作方法,
因此系统会定位到空操作方法 _empty中去解析,_empty方法的参数就是当前URL里面的操作名,
因此会看到依次输出的结果是:

当前城市:beijing
当前城市:shanghai
当前城市:shenzhen






空模块

空模块的概念是指当系统找不到指定的模块名称的时候,
系统会尝试定位空模块(EmptyAction),利用这个机制我们可以用来定制错误页面和进行URL的优化。

现在我们把前面的需求进一步,把URL由
原来的 http://serverName/index.php/City/shanghai/
变成 http://serverName/index.php/shanghai/

这样更加简单的方式,如果按照传统的模式,我们必须给每个城市定义一个Action类,
然后在每个Action类的index方法里面进行处理。 可是如果使用空模块功能,这个问题就可以迎刃而解了。
我们可以给项目定义一个EmptyAction类

<?php
class EmptyAction extends Action{
    public function index(){
        //根据当前模块名来判断要执行那个城市的操作
         $cityName = MODULE_NAME;
        $this->city($cityName);
    }
    //注意 city方法 本身是 protected 方法
    protected function city($name){
        //和$name这个城市相关的处理
         echo '当前城市' . $name;
    }
}

   
接下来,我们就可以在浏览器里面输入
http://serverName/index.php/beijing/
http://serverName/index.php/shanghai/
http://serverName/index.php/shenzhen/

由于系统并不存在beijing、shanghai或者shenzhen模块,
因此会定位到空模块(EmptyAction)去执行,会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen


空模块和空操作还可以同时使用,用以完成更加复杂的操作。

转载于:https://www.cnblogs.com/KTblog/p/5180292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值