【问题标题】:Laravel 5.3 - Handling NotFoundHttpExceptionLaravel 5.3 - 处理 NotFoundHttpException
【发布时间】:2016-10-06 23:32:30
【问题描述】:

我正在使用 Laravel 5.3 并试图处理来自 app\Exceptions\Handler.php 内部 render() 的所有常见异常。我想保存一个会话变量并自己在控制器中检查它。

例如:对于TokenMismatchException,它的工作原理如下:

if($excp_class == 'Illuminate\Session\TokenMismatchException'){
return redirect($request->fullUrl())->with('TokenError', 'CSRF');
}    

但是,对于NotFoundHttpException,我似乎无法让 Session 保存值。

if(stristr($excp_class, 'NotFoundHttpException')!=false)
{
    //return redirect()->route('XYZRoute')->with('TokenError', 'NotFound'); //Also tried `withError`

    \Request::session()->put('TokenError', 'NotFound'); //not working
    \Request::session()->save();

    return back();
}

我在这里错过了什么?

【问题讨论】:

  • 您是否遇到了 PHP 异常?我认为RedirectResponse 上没有withError 方法。有一个withErrors(复数)方​​法需要验证结果(MessageProvider),但这不是你在这里所做的。我认为 with('TokenError', 'NotFound') 就是你想要的。
  • With 也不起作用。顺便说一句,我尝试了很多方法将会话放在这里。
  • 那你需要解释“不起作用”。您的原始代码看起来会导致 PHP 异常。解释发生了什么,您如何尝试访问错误...详细信息。
  • 我已经更新了。再看看。

标签: php exception laravel-5.3


【解决方案1】:

由于 Laravel 没有找到路由(NotFoundHttpException),你的请求没有通过中间件 \Illuminate\Session\Middleware\StartSession。 那么您的请求没有会话。

如果您希望所有请求都有会话,则必须在内核的 $middleware 中添加 \Illuminate\Session\Middleware\StartSession::class:

namespace App\Http;
class Kernel extends HttpKernel {
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Session\Middleware\StartSession::class,
    ];
...
}

我没有对此进行测试,但我希望它会起作用并对您有所帮助。

【讨论】:

  • 很棒的人..这很有意义并且也解决了这个问题..谢谢
  • 太棒了。这也解决了我试图将 Handler.php 中的 NotFoundHttpException 重定向到另一个页面的问题。
猜你喜欢
  • 2017-01-23
  • 2017-03-12
  • 2019-12-04
  • 2017-08-10
  • 2017-01-10
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2021-01-06
相关资源
最近更新 更多