我使用的是Laravel 4.1,在我的应用中,我需要显示一个带有预先填充复选框的表单。但我尝试使用表单模型绑定来完成它,它不起作用。
{{ 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() }}
有什么方法可以让它发挥作用吗?
答案 0 :(得分:6)
我最终在我的控制器中处理这个问题,因为@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,我更喜欢处理这个服务器端。
答案 1 :(得分:2)
对我来说很好,这是我刚刚在这里做的一个测试:
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">