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;
}
那么在控制器写,例如:
页面效果为:
日志执行顺序为:
前置方法与后置方法可以为空。
方法名字建议使用定义常量的方式来检测。方便后续扩展。
写这个后置是为了,自己准备进行事件绑定,但是不想每个方法去写,准备写一个类来设置进行对不同方法,不同监听事件。
本作品采用《CC 协议》,转载必须注明作者和本文链接
Laravel 的 Middleware 了解一下
改 vendor 目录下的代码是非常糟糕的事情
@leo 这个我自然是知道的,准备给laravel提一下这个东西。
前置方法与后置方法有时候会用得到。
至于你说的中间件,我自然是了解的,你看我的截图先后执行顺序就晓得了。
@小丑路人 说明你对中间件还不够了解
@leo 那中间件,执行的位置到 最后嘛?
@小丑路人 当然可以
@leo 我在网吧,我装个环境,来测试后置
@leo 确实是可以的
@leo 好的 谢谢呢。
@leo 文章怎么禁止回复呢?
想把文章禁掉,不让回复了。
@leo 其实加这两个方法,也是还有其他原因的。可控性。
针对不同的来自定义不同的操作也是方便的。
虽然说可以使用中间件来完成,但是有时候需要的并不是这样的。
@小丑路人 你说的这些用中间件都可以解决
@leo 我现在晓得了。但是
控制器中使用钩子的行为有点奇怪,可以试一下模型事件
文档不是写得很清楚嘛..前置中间件,后置中间件,甚至还有个Terminable 中间件
@carlclone 好的 谢谢 已经知道了
@Max 不是模型的事情。中间件可以实现的
楼主如果需要使用类似 initialize 的前置方法,可以直接在 App\Controllers\Controller 文件中 覆写 callAction 方法就可以了,不用捣鼓 Illuminate 框架文件。
如图:
@carson 嗯咯 好的,谢谢。利用中间件实现了的
@小丑路人 圈圈基地的小丑路人?
@小无力 .............who.........................嗯啊