关于在ThinkPHP子方法不执行构造函数中的方法, 就是在大多数方法下需要执行,但某个方法下面不需要它自动执行时怎么办?

代码如下

public function _initialize() {
        quick_login();    
        $this->ErrorJumpUrl = U("Home/Index/index");
    }

复制代码
在这个构造函数中 有一个 quick_login();方法 是判断用户是否登录的!
但在这个类中的某个方法中 不要执行这个方法 请问怎么办?

就是在大多数方法下需要执行,但某个方法下面不需要它自动执行时怎么办?

阅读 3.2k
2 个回答

这种 需求 就是要用到 行为类(钩子),不能用这样的 构造函数,

遇到过差不多的,但是判断是写成中间件的。

class Order extends \app\admin\controller\Base
{
    protected $middleware = ['AdminCheck'];

    // 加载订单首页
    public function index()
    {
        return $this->fetch();
    }

    //获取订单
    public function getOrder(Request $request)
    {
        return "123"
    }
}

protected $middleware = ['AdminCheck'];这个中间件用来判断是不是管理员,默认在class里调用了,导致这个类下所有方法都会验证管理员,这种只需要改一下调用中间件的部分就行。

改成

protected $middleware = [
        'AdminCheck' => ['except' => ['getOrder']]
    ];

在中间件后面增加了限定参数。改了后getOrder方法就不验证管理员了。
具体有哪些可以参考下面;做个记录,解决了一个需求;

// auth中间件,使用了except,表示出了hello方法外,这个控制器其他的方法都会执行这个中间件
    // check中间件,使用了only表示只有这个控制器的login方法执行这个中间件
    // log中间件,没有使用任何限定参数,表示这个控制器里面所有的方法都会执行log这个中间件
    protected $middleware = [
        'auth' => ['except' => ['hello']],
        'check' => ['only' => 'login'],
        'log'
    ];
推荐问题