从 laravel 中间件调用控制器方法



我的基本控制器中有一个方法.php可以像这样格式化我对我喜欢的所有响应;

public function sendError($error, $errorMessages = [], $code = 404)
{
$response = [
'success' => false,
'message' => $error,
];
if (!empty($errorMessages)) {
$response['data'] = $errorMessages;
}
return response()->json($response, $code);
}

如果我从另一个控制器调用它,我只需调用

return $this->sendError('Validation Error', $validator->errors(), 400);

但我也在为我的 JWT-Auth 使用中间件。有没有办法从中间件内部调用这个控制器方法,而不是重写方法?

通过创建控制器在中间件中尝试这个

return (new yourChildController)->sendError('xyz errro',[],400)

首先获取现有实例:

use IlluminateSupportFacadesRoute;
// ...
$myController = Route::getCurrentRoute()->getController();

然后像往常一样调用,在 OP 的情况下:

return $myController->sendError('My error message.', [], 400);

请注意,以上是使用Laravel 6.x版本进行测试的。

中间件中的

$request
->route()
->getController()
->myMethodOnMyController($data);

在Laravel 9上测试