Флажок Laravel Collective FormBuilder проверил статус, содержащий неправильное (старое) значение - PullRequest
0 голосов
/ 24 октября 2018

Я постараюсь объяснить мою проблему как можно более подробно.Я нашел похожие вопросы, но ни один не описывает мою ситуацию вообще.Я не уверен, что у этого есть решение, это может быть ошибка третьей стороны.Но давайте попробуем.Заранее спасибо!

Контекст

  • Laravel 5.3
  • Форма редактирования, созданная с помощью LaravelCollective FormBuilder
  • A Model (подлежит редактированию), имеет логическое свойство с именем «required»
  • Флажок, созданный с использованием Form::checkbox с упомянутой выше моделью

Основная проблема

Открывается форма редактирования модели с логическим свойством с именем «required», и флажок, который должен быть установлен, снят.Если я нажму F5, появится флажок.

Причина

Согласно Коллективная документация Laravel :

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

  1. Данные флэш-памяти сеанса (старый ввод)
  2. Явно переданное значение
  3. Данные атрибута модели

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

  1. checkbox()
  2. checkable()
  3. getCheckedState()
  4. getCheckboxCheckedState()

И в последнем случае выполняется следующее условное утверждение:

    if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name))) {
        return false;
    }

Итак, почему oldInputIsEmpty() возвращает false?И почему old("required") ноль?Поскольку в предыдущем представлении (то есть перед доступом к форме редактирования), существует другая форма, которая не имеет свойства с именем «required», но используется для фильтрации списка, содержащего записи для этой модели.Входные значения формы хранятся в сеансе (old_input) и переносятся в форму редактирования.

Заключение (и основной вопрос)

По сути, как можно избежатьэто случилось?Это поведение должно быть?Или никто не думал о формах, следующих за формами?

...