лучший способ хранить сообщения об ошибках в Laravel (сеанс или переменная) - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь выяснить, как лучше всего хранить сообщения об ошибках (например, из-за неправильных параметров).

Предполагается, что я объявляю принятые параметры в контроллере, но если есть какие-либо другиеПри заданном параметре я хочу показать страницу, которая просто показывает сообщение об ошибке «указан неверный параметр».
Очень простой код Пример:

if ($param == 'example') {
  // some code
} else {
  // accepting no other parameter and should return a page with an error message
  // session? variable?
}
return view('index/example');
  1. Есть сеансы Iможно использовать как:

    • обычный сеанс: session()->put(...)
      Проблема: данные сохраняются, если я не удаляю их вручную

    • прошить сообщение сеансу: session()->flash(...)
      Проблема: это для следующего запроса, поэтому, когда я исправляю неправильный параметр, мне приходится дважды перезагружаться, чтобы загрузить правильную страницу

    • сеанс для текущего запроса: session()->now(...);
      Проблема: ??

  2. Я также могу использовать обычную переменную:

    • $error = 'message;
      return view('index', compact('error'));
      Проблема: переменная с сообщением об ошибке будет сохранена, если не будет удалена вручную

Я знаю, что для такого рода сообщений создаются флеш-сообщения сессий, но я не хочу их использовать из-за проблемы, которую я кратко объяснил выше.

IХотелось бы узнать о (не) преимуществах каждого метода, а также о том, какой из них лучший, а может быть, есть рекомендуемый, который на самом деле работает довольно хорошо.

1 Ответ

1 голос
/ 04 ноября 2019

Я рекомендую этот фрагмент кода, который я использую для проекта:

/*
 * Add an error to Laravel session $errors
 * @author Pavel Lint
 * @param string $key
 * @param string $error_msg
 */
function add_error($error_msg, $key = 'default') {
    $errors = Session::get('errors', new ViewErrorBag);

    if (! $errors instanceof ViewErrorBag) {
        $errors = new ViewErrorBag;
    }

    $bag = $errors->getBags()['default'] ?? new MessageBag;
    $bag->add($key, $error_msg);

    Session::flash(
        'errors', $errors->put('default', $bag)
    );
}

Это позволяет хранить ошибки там же, где и сам Laravel. Вы получаете преимущество, что переменная $errors доступна во всех ваших шаблонах блейдов автоматически. Тогда где-нибудь в вашем блейде этот стандартный кусок кода покажет ошибки:

@if ($errors->any())
    <div class="alert alert-danger">
        There were some errors with your request.
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...