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

进入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社区的链接地址

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 20
leo

Laravel 的 Middleware 了解一下

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

3个月前

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

3个月前
leo

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

3个月前

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

3个月前
leo

@小丑路人 当然可以

class SomeMiddleware
{
    public function handle($request, Closure $next)
    {
        // do something before controller code
        $resp = $next($request);
        // do something after controller code
        return $resp;
    }
}
3个月前

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

3个月前

@leo 确实是可以的

3个月前

@leo 好的 谢谢呢。

3个月前

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

3个月前

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

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

3个月前
leo

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

3个月前

@leo 我现在晓得了。但是

3个月前
Max

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

3个月前

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

3个月前

@carlclone 好的 谢谢 已经知道了

2个月前

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

2个月前

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

如图:

file

2个月前

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

2个月前
小无力

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

2个月前

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

2个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!