Я постараюсь объяснить мою проблему как можно более подробно.Я нашел похожие вопросы, но ни один не описывает мою ситуацию вообще.Я не уверен, что у этого есть решение, это может быть ошибка третьей стороны.Но давайте попробуем.Заранее спасибо!
Контекст
- Laravel 5.3
- Форма редактирования, созданная с помощью LaravelCollective FormBuilder
- A Model (подлежит редактированию), имеет логическое свойство с именем «required»
- Флажок, созданный с использованием
Form::checkbox
с упомянутой выше моделью
Основная проблема
Открывается форма редактирования модели с логическим свойством с именем «required», и флажок, который должен быть установлен, снят.Если я нажму F5, появится флажок.
Причина
Согласно Коллективная документация Laravel :
Если во флэш-данных Session есть элемент, соответствующий имени ввода, он будет иметь приоритет над значением модели.Итак, приоритет выглядит следующим образом:
- Данные флэш-памяти сеанса (старый ввод)
- Явно переданное значение
- Данные атрибута модели
Я могу подтвердить, что старый ввод не работает, но я не понимаю точно почему.FormBuilder вызывает следующие функции по порядку:
checkbox()
checkable()
getCheckedState()
getCheckboxCheckedState()
И в последнем случае выполняется следующее условное утверждение:
if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name))) {
return false;
}
Итак, почему oldInputIsEmpty()
возвращает false?И почему old("required")
ноль?Поскольку в предыдущем представлении (то есть перед доступом к форме редактирования), существует другая форма, которая не имеет свойства с именем «required», но используется для фильтрации списка, содержащего записи для этой модели.Входные значения формы хранятся в сеансе (old_input) и переносятся в форму редактирования.
Заключение (и основной вопрос)
По сути, как можно избежатьэто случилось?Это поведение должно быть?Или никто не думал о формах, следующих за формами?