Laravel 控制器前置方法与后置方法的代码变更设置

进入laravel的核心文件 vendor\laravel\framework\src\Illuminate\Routing\Controller.php
查找到方法 callAction
源码为:

public function callAction($method, $parameters)
{
        return calluserfuncarray([$this, $method], $parameters);
}

改成:

public function callAction($method, $parameters)
{
            if(methodexists($this,'beforeAction')) calluserfuncarray([$this, 'beforeAction'], ['action' => $method]);
            $return = calluserfuncarray([$this, $method], $parameters);
            if(methodexists($this,'afterAction')) calluserfuncarray([$this, 'afterAction'], ['action' => $method]);
            return $return;
}

那么在控制器写,例如:
file

页面效果为:
file

日志执行顺序为:file

前置方法与后置方法可以为空。
方法名字建议使用定义常量的方式来检测。方便后续扩展。
写这个后置是为了,自己准备进行事件绑定,但是不想每个方法去写,准备写一个类来设置进行对不同方法,不同监听事件。

laravel社区的链接地址

本作品采用《CC 协议》,转载必须注明作者和本文链接
小丑路人
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 20
leo

Laravel 的 Middleware 了解一下

改 vendor 目录下的代码是非常糟糕的事情

5年前 评论

@leo 这个我自然是知道的,准备给laravel提一下这个东西。
前置方法与后置方法有时候会用得到。
至于你说的中间件,我自然是了解的,你看我的截图先后执行顺序就晓得了。

5年前 评论
leo

@小丑路人 说明你对中间件还不够了解

5年前 评论

@leo 那中间件,执行的位置到 最后嘛?

5年前 评论
leo

@小丑路人 当然可以

class SomeMiddleware
{
    public function handle($request, Closure $next)
    {
        // do something before controller code
        $resp = $next($request);
        // do something after controller code
        return $resp;
    }
}
5年前 评论

@leo 我在网吧,我装个环境,来测试后置

5年前 评论

@leo 文章怎么禁止回复呢?
想把文章禁掉,不让回复了。

5年前 评论

@leo 其实加这两个方法,也是还有其他原因的。可控性。
针对不同的来自定义不同的操作也是方便的。

虽然说可以使用中间件来完成,但是有时候需要的并不是这样的。

5年前 评论
leo

@小丑路人 你说的这些用中间件都可以解决

5年前 评论

控制器中使用钩子的行为有点奇怪,可以试一下模型事件

5年前 评论

文档不是写得很清楚嘛..前置中间件,后置中间件,甚至还有个Terminable 中间件

5年前 评论

@Max 不是模型的事情。中间件可以实现的

5年前 评论

楼主如果需要使用类似 initialize 的前置方法,可以直接在 App\Controllers\Controller 文件中 覆写 callAction 方法就可以了,不用捣鼓 Illuminate 框架文件。

如图:

file

5年前 评论

@carson 嗯咯 好的,谢谢。利用中间件实现了的

5年前 评论

@小丑路人 圈圈基地的小丑路人?

5年前 评论

@小无力 .............who.........................嗯啊

5年前 评论

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