2016-10-06 5 views
0

Im использует Laravel 5.3 и пытается обрабатывать все распространенные исключения из app\Exceptions\Handler.php внутри render(). Я хочу сохранить сеанс var и сам проверить его на контроллере.Laravel 5.3 - Обработка NotFoundHttpException

Например: TokenMismatchException, он хорошо работает так:

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

Однако для NotFoundHttpException, я не могу показаться, чтобы получить сеанс сохранить значение.

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(); 
} 

Что мне здесь не хватает?

+0

Вы получаете исключение PHP? Я не думаю, что есть метод 'withError' для' RedirectResponse'. Существует метод 'withErrors' (множественное число), который ожидает результат проверки (MessageProvider), но это не то, что вы здесь. Я думаю, что просто «с (« TokenError »,« NotFound ») - это то, что вы хотите. – jszobody

+0

'With' также не работает. Ive пробовал много способов поставить сессию здесь, кстати. –

+0

Тогда вам нужно объяснить, что «не работает». Ваш исходный код выглядел так, что это вызвало бы исключение PHP. Объясните, что происходит, как вы пытаетесь получить доступ к ошибке ... подробнее. – jszobody

ответ

2

Поскольку Laravel не нашел маршрут (NotFoundHttpException), ваш запрос не прошел через промежуточное ПО \ Illuminate \ Session \ Middleware \ StartSession. Ваш запрос не имеет сеанса.

Если вы хотите, чтобы все ваши просьбы иметь сеанс, вам придется добавить \ Осветите \ Session \ Middleware \ StartSession :: класс, в $ промежуточного слоя вашего ядра:

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, 
    ]; 
... 
} 

Я не проверял, что но я надеюсь, что это сработает и поможет вам.

+0

Удивительный мужчина .. это имеет смысл и решило проблему, а также .. Спасибо –

Смежные вопросы