Laravel Input: all() игнорирует отключенные входы

Пока var_dumping содержимое Input:all() с Laravel 4, я заметил, что вход, созданный с помощью следующего кода, игнорируется каркасом:

{{ Form::text('departure', 'Departure', array('class' => 'form-control', 'disabled')) }}

Но следующее работает так, как ожидалось:

{{ Form::text('departure', 'Departure', array('class' => 'form-control')) }}

У меня есть веская причина отключить пользовательский интерфейс с тем, что находится в этом поле ввода. Однако мне нужно сохранить его в базе данных. Как мне это сделать? Отключить атрибут disabled с помощью jQuery, когда пользователь отправляет форму? Это немного смешно, не так ли?

Ответ 1

Просто измените disabled на readonly

Ответ 2

Плохая идея полагаться на флагов HTML, например disabled или readonly. Пользователь может легко открыть инспектора и изменить значение поля. Не раскрывайте это вообще в шаблоне, это бизнес-логика, которая принадлежит модели!

Выполняете ли вы цикл Input:: all(), чтобы сохранить поля в базе данных? Если это так, вы можете написать что-то вроде этого:

$allowedFields = ["field1", "field2", "field3" ...];
foreach($allowedFields as $field) {
    if(Input::has($field) {
        $myEloquentModel->{$field} = Input::get($field);
    }
}
$myEloquentModel->save();

Преимущества: проверяет только разрешенные поля, обновляет только текущие поля в фактическом запросе.