Laravel 5.4 FormRequest forbiddenResponse()方法已被failedAuthorization()取代

时间:2017-03-21 17:56:33

标签: redirect request laravel-5.4

如标题中所述,我注意到forbiddenResponse()方法已从Laravel 5.4中的FormRequest中删除。

此方法已由现在触发failedAuthorization()的{​​{1}}方法取代。

这会给我带来麻烦,因为我需要从表单请求中进行重定向,而且似乎不再可能了。

有人会以这种方式解决问题吗?

2 个答案:

答案 0 :(得分:1)

转到App\Exceptions\Handler并在render方法中添加:

if ($exception instanceof AuthorizationException) {
    // Do what you want here, Response, Redirect...
}

答案 1 :(得分:0)

对不起,我自上次留言以来就成了父亲;)

以下是我给你提示后的所作所为。

我创建了一个我的formRequests扩展的BaseRequest类。在其中,我已经覆盖了failedAuthorization方法:

protected function failedAuthorization()  
{
    $exception = new AuthorizationException('This action is unauthorized.');
    $exception->error_message = $this->error_message;
    $exception->redirect = $this->getRedirectUrl();
    $exception->dontFlash = $this->dontFlash;           
    throw $exception;
}

App\Exceptions\Handler课程中,我在render方法中添加了以下处理:

if ($exception instanceof AuthorizationException) {  
    // ajax or api call  
    if ($request->expectsJson()) {
        // treatment
    }

    // we notify the current user with a modal
    if($exception->error_message) Modal::alert($exception->error_message, 'error');

    if ($exception->redirect){
        return redirect()->to($exception->redirect)->withInput(request()->except($exception->dontFlash));
    } else {
        return redirect()->back()->withInput(request()->except($exception->dontFlash));
    }
}  

通过这个过程,我可以使用可自定义的formRequest进行令人满意的处理。但我仍然发现它有点乱,而且不是很干净。如果您或其他人有更好的方法来实现这一点,我很乐意与您讨论。