Я использую Laravel 4.1 и в своем приложении мне нужно показать форму с предварительно заполненными флажками. Но я пытаюсь сделать это с помощью Form Model Binding, это не сработает.
{{ Form::model($user, array('route' => 'settings-notify')) }} <div class="formRow form-horizontal_row"> {{ Form::checkbox('notify_visit', '1') }} </div> <div class="formRow form-horizontal_row"> {{ Form::checkbox('notify_rate', '1') }} </div> <div class="formSubmit"> {{ Form::submit('Save') }} </div> {{ Form::close() }}
Есть ли способ заставить его работать?
Отлично работает для меня, вот тест, который я только что сделал здесь:
Route::get('test', function() { $user = User::where('email','myemail@domain.com')->first(); Form::model($user); $user->notify_rate = true; echo e(Form::checkbox('notify_rate')); $user->notify_rate = false; echo e(Form::checkbox('notify_rate')); });
Это то, что я получил:
<input checked="checked" name="notify_rate" type="checkbox" value="1"> <input name="notify_rate" type="checkbox" value="1">
Я закончил работу с этим в своем контроллере, потому что, как пишет @Ladislav Maxa в своем комментарии к @Antonio Carlos Ribeiro, база данных никогда не обновляется. Это связано с тем, что пустые флажки не отправляются с формой, поэтому для обновления базы данных не доступно значение «unchecked».
Решение, которое я использовал, – проверить наличие поля в объекте get. Если он установлен, флажок был проверен.
$notify_rate = Input::get('notify_rate') ? 1 : 0; $data['notify_rate'] = $notify_rate;
Другим способом, который я сделал это раньше, было создание текстового ввода с тем же именем и значением 0 перед этим флажком. Если флажок отключен, вводится текстовое входное значение, если флажок установлен, используется значение.
<input name="notify_rate" type="text" value="0"> <input name="notify_rate" type="checkbox" value="1">
Вероятно, это неверный HTML, и я предпочитаю иметь дело с этой серверной стороной.