think PHP的空操作和空控制器的使用场景和使用方法

版权声明: https://blog.csdn.net/weixin_40047834/article/details/80688647

最近工作不忙,没什么事情。看了看 think PHP3.2 和5.0的区别,无意中发现了空操作和空控制器的介绍。

看明白后有点疑问就是这些东西的适用场景有哪些,然后谷歌了一下,发现基本上都是使用在当用户通过URL有意或者无意传递一些不正确的数据信息时候会使用到。

tinkphp 3.2中:空操作

<?php
namespace Home\Controller;
use Think\Controller;
class CityController extends Controller{
    public function _empty($name){
        //把所有城市的操作解析到city方法
        $this->city($name);
    }

    //注意 city方法 本身是 protected 方法
    protected function city($name){
        //和$name这个城市相关的处理
         echo '当前城市' . $name;
    }
}

think php 5.0:空操作

<?php
namespace app\index\controller;

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

3.2和5.0在空操作上基本一样,手册上提示说

V5.0.2+开始,空操作方法不需要任何参数,如果要获取当前的操作方法名,直接调用当前请求对象来获取,你也可以使用依赖注入(参考请求章节的依赖注入)

think PHP 3.2 空控制器:

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

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

think PHP 5.0 空控制器:

我们可以给项目定义一个Error控制器类

<?php
namespace app\index\controller;

use think\Request;

class Error 
{
    public function index(Request $request)
    {
        //根据当前控制器名来判断要执行那个城市的操作
        $cityName = $request->controller();
        return $this->city($cityName);
    }
    
    //注意 city方法 本身是 protected 方法
    protected function city($name)
    {
        //和$name这个城市相关的处理
         return '当前城市' . $name;
    }
}

在5.0中空控制器Error是可以定义的,在config中修改,这没啥可说的了。

// 更改默认的空控制器名
'empty_controller'      => 'MyError',

空操作和空控制器看起来虽然不起眼,不过如何能被利用好的话,也可以让网站更加高端点把,至少感觉会人性化一点。

以此作为总结,方便以后工作使用

阅读更多

扫码向博主提问

孙_常乐

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • css
  • thinkphp5
去开通我的Chat快问
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页