我的基本控制器中有一个方法.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上测试