【问题标题】:Form Model Binding for checkboxes复选框的表单模型绑定
【发布时间】:2014-04-04 13:45:53
【问题描述】:

我正在使用 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() }}

有什么办法让它工作吗?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    我最终在我的控制器中处理了这个问题,因为正如@Ladislav Maxa 在他们对@Antonio Carlos Ribeiro 的评论中所说,数据库永远不会更新。这是因为空复选框未与表单一起提交,因此没有“未选中”值可用于更新数据库。

    我使用的解决方案是检查 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,我更喜欢处理这个服务器端。

    【讨论】:

    • 在 Laravel 4.2 中,未经检查的输入永远不会被提交。是的,我以同样的方式解决了这个问题。我没有在 Laravel 5 中尝试过,但这完全可以在框架中处理。我假设这是一个错误。 $model->show_name = 0; $model->show_phone = 0; $model->fill(Input::all());
    【解决方案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">
    

    【讨论】:

    • 你是对的,它有效。我的应用程序中的问题出现在用新数据填充模型并调用 save 方法期间。尽管模型有有效数据,但表示表单数据的数据库元组不会被覆盖。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2018-06-21
    • 2015-03-02
    • 2013-03-06
    • 2011-03-15
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多