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

cld4siwp  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(186)

我在我的基本controller.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的中间件。有没有办法从中间件内部调用这个控制器方法,而不是重写方法?

jckbn6z7

jckbn6z71#

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

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

yvfmudvl2#

首先获取现有示例:

use Illuminate\Support\Facades\Route;

// ...

$myController = Route::getCurrentRoute()->getController();

然后像往常一样打电话,在OP的情况下:

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

注意以上是在Laravel 6.x版本中测试的。

vql8enpb

vql8enpb3#

在中间件中

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

在Laravel 9上测试

相关问题