#php #exception #laravel-5.3
#php #исключение #laravel-5.3
Вопрос:
Я использую Laravel 5.3 и пытаюсь обработать все распространенные исключения appExceptionsHandler.php
изнутри render()
. Я хочу сохранить переменную сеанса и проверить ее в контроллере самостоятельно.
Например: для TokenMismatchException
, это хорошо работает следующим образом:
if($excp_class == 'IlluminateSessionTokenMismatchException'){
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();
}
Чего мне здесь не хватает?
Комментарии:
1. Вы получаете исключение PHP? Я не думаю, что есть
withError
метод наRedirectResponse
. СуществуетwithErrors
(множественный) метод, который ожидает результат проверки (MessageProvider), но это не то, что вы здесь делаете. Я думаю, что это простоwith('TokenError', 'NotFound')
то, что вы хотите.2.
With
также не работает. Я перепробовал много способов поместить сеанс здесь, кстати.3. Тогда вам нужно объяснить, что «не работает». Ваш исходный код выглядел так, как будто это вызвало бы исключение PHP. Объясните, что происходит, как вы пытаетесь получить доступ к ошибке… Подробные сведения.
4. я обновил его сейчас. Посмотрите еще раз.
Ответ №1:
Поскольку Laravel не нашел маршрут (NotFoundHttpException), ваш запрос не прошел через промежуточное программное обеспечение Illuminate Session Middleware StartSession. Тогда у вашего запроса нет сеанса.
Если вы хотите, чтобы все ваши запросы имели сеанс, вам нужно будет добавить IlluminateSessionMiddlewareStartSession::class в $middleware вашего ядра :
namespace AppHttp;
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 = [
IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
IlluminateSessionMiddlewareStartSession::class,
];
...
}
Я не проверял это, но я надеюсь, что это сработает и поможет вам.
Комментарии:
1. Потрясающий человек.. это имеет смысл и также решило проблему.. Спасибо
2. Отлично. Это также решило проблему, с которой я пытался перенаправить исключение NotFoundHttpException в Handler.php с мигающим сообщением об ошибке на другую страницу.