表单模型绑定复选框

时间:2014-04-04 13:45:54

标签: php laravel laravel-4

我使用的是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() }}

有什么方法可以让它发挥作用吗?

2 个答案:

答案 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">