Reputation: 2187
I'm using Laravel 4.1 and in my app I need to show a form with pre filled checkboxes. But I try to do it with using Form Model Binding, it doesn't work.
{{ 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() }}
Is there any way to make it working?
Upvotes: 4
Views: 5027
Reputation: 3468
I ended up handling this in my controller because as @Ladislav Maxa says in their comment to @Antonio Carlos Ribeiro the database never updates. This is because empty checkboxes are not submitted with the form so no 'unchecked' value is available for updating the database.
The solution I used is to check for the existence of the field in the get object. If it's there the box was checked.
$notify_rate = Input::get('notify_rate') ? 1 : 0;
$data['notify_rate'] = $notify_rate;
Another way I have done this before was to create a text input with the same name and a value of 0 before the checkbox. If the checkbox is unticked the text input value is submitted, if the checkbox is ticked it's value is used.
<input name="notify_rate" type="text" value="0">
<input name="notify_rate" type="checkbox" value="1">
That's probably not valid HTML though and I prefer dealing with this server side.
Upvotes: 6
Reputation: 87769
Works fine for me, here's a test I just did here:
Route::get('test', function() {
$user = User::where('email','[email protected]')->first();
Form::model($user);
$user->notify_rate = true;
echo e(Form::checkbox('notify_rate'));
$user->notify_rate = false;
echo e(Form::checkbox('notify_rate'));
});
This is what I got:
<input checked="checked" name="notify_rate" type="checkbox" value="1">
<input name="notify_rate" type="checkbox" value="1">
Upvotes: 2