一个困扰我很久的小问题,求圣主们解答

一直都没在意这个小问题 能用就行,但是总见到我就想弄明白了
为什么很多的类里面都有个
public function handle($request, Closure $next) {}
这种函数呢,是自动调用?没见手动调用的地方啊。中间件 也是这么写 好多地方直接写 这个 函数 没看见 调用的 Yii 里面也有 接口文档里面也有 。
有人能详细的说一下嘛

做自己
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4
DukeAnn

handle 这个函数名

7年前 评论

就是为了方便 foreach 使用而已,刚好这个名称也比较容易理解。假如三个类都定义了 handle 方法,那是不是可以直接调用这个方法就行了?

$classes = [
    'AClass',
    'BClass',
    'CClass'
];

foreach($classes as $class){
    return (new $class)->handle();
}

下面的代码是事件 Dispatcher 的一个方法,如果你在定义监听器的时候没有定义call 方法,默认会用 handle方法。

protected function parseClassCallable($listener)
{
    $segments = explode('@', $listener);

    return [$segments[0], count($segments) == 2 ? $segments[1] : 'handle'];
}
7年前 评论

名称只不过是个约定,调用肯定是调用了的。

就拿middleware来说,定义了middleware,那我就调用你的handle方法来决定是继续处理请求还是直接返回。这个约定的名称handle在Illuminate\Pipeline\Pipeline这个类的$method属性中定义。调用也是在这个类中调用的。

7年前 评论
DukeAnn

@eddy8
@oustn 谢谢啦

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!