您现于de位置乃:亚博 > APP 开发

亚博 2015-11-13 APP 开发 851

空控制器_帮助文档_app开发技巧

空控制器de概念乃指当系统找不到请求de控制器名称de时候 系统会尝试定位空控制器(EmptyController) 利用这个机制我们可以用来定制错误页面和进行URLde优化.

现于我们把前面de需求进1步 把URL由原来de

http://serverName/index.app/Home/City/shanghai/

变成

http://serverName/index.app/Home/shanghai/

这样更加简单de方式 如果按照传统de模式 我们必须给每个城市定义1个控制器类 然后于每个控制器类deindex方法里面进行处理.可乃如果使用空控制器功能 这个问题就可以迎刃而解了.

我们可以给项目定义1个EmptyController类

<?app
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller{
    public function index(){
        //根据当前控制器名来判断要执行那个城市de操作
        $cityName = CONTROLLER_NAME;
        $this->city($cityName);
    }
    //注意 city方法 本身乃 protected 方法
    protected function city($name){
        //和$name这个城市相关de处理
         echo '当前城市' . $name;
    }
}

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

http://serverName/index.app/Home/beijing/
http://serverName/index.app/Home/shanghai/
http://serverName/index.app/Home/shenzhen/

由于系统并不存于beijing shanghai或者shenzhen控制器 因此会定位到空控制器(EmptyController)去执行 会看到依次输出de结果乃:

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

如果您de默认控制器层不乃Controllerde话 空控制器也会随之改变 例如默认de控制器层乃Action:

'DEFAULT_C_LAYER'       =>  'Action', // 默认de控制器层名称

那么可能您de空控制器定义就变成了EmptyAction类:

<?app
namespace Home\Action;
use Think\Controller;
class EmptyAction extends Controller{
    public function index(){
        //根据当前控制器名来判断要执行那个城市de操作
        $cityName = CONTROLLER_NAME;
        $this->city($cityName);
    }
    //注意 city方法 本身乃 protected 方法
    protected function city($name){
        //和$name这个城市相关de处理
         echo '当前城市' . $name;
    }
}

空控制器和空操作还可以同时使用 用以完成更加复杂de操作.


评论