如标题中所述,我注意到forbiddenResponse()
方法已从Laravel 5.4中的FormRequest中删除。
此方法已由现在触发failedAuthorization()
的{{1}}方法取代。
这会给我带来麻烦,因为我需要从表单请求中进行重定向,而且似乎不再可能了。
有人会以这种方式解决问题吗?
答案 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进行令人满意的处理。但我仍然发现它有点乱,而且不是很干净。如果您或其他人有更好的方法来实现这一点,我很乐意与您讨论。