使用Laravel 5.1

时间:2015-12-05 23:37:06

标签: php eloquent laravel-5.1

我的表单中有以下复选框。表单使用模型绑定:

 {!! Form::model($user, ['method' => 'PATCH', 'action' => ['AccountController@update']]) !!}
       {!! Form::hidden('text_only_email', false) !!}
       <div class="checkbox">
            <label>
                  {!! Form::checkbox('text_only_email', 'true') !!} 
                  I'd prefer to receive emails as text only
            </label>
      </div>
      <div class="form-group">
           {!! Form::label('name', 'Name *', ['class' => '']) !!}
           {!! Form::text('name', null, ['class' => 'form-control']) !!}
           {!! errors_for('name', $errors) !!}
      </div>
      <button type="submit" class="btn btn-primary ">Update</button>
  {!! Form::close() !!}

我的控制器操作如下:

 public function update(AccountRequest $request)
 {

       Auth::user()->update($request->all());

       flash()->success('Details updated');

       return redirect('account');
 }

在我的用户模型中,我也将其设置为质量分配字段:

protected $fillable = ['name', 'text_only_email'];

基本上这是问题,如果我选中复选框并将名称字段留空(名称字段是必填字段),我会得到预期的回发错误,隐藏的输入字段设置为true。现在让我们说出于某种原因我决定在重新提交之前取消选中回复后的复选框,或者让我们说它是更新表单而不是创建表单,在这种情况下,隐藏字段值将保持设置为{{ 1}}因此表单提交没有按预期工作。

我能想到如何使这项工作的唯一方法是使用一些jquery在用户选中或取消选中复选框时切换隐藏值。

我知道可以通过使用类似这样的东西在服务器端实现:true但我想知道是否有人遇到过更优雅的解决方案,因此我不需要继续检查服务器端?

2 个答案:

答案 0 :(得分:0)

我认为你有两个同名的字段,text_only_email是一个隐藏的输入和一个复选框

答案 1 :(得分:0)

通过添加手动隐藏输入字段而不是使用表单构建器来生成它来设法修复:<input name="text_only_email" value="" type="hidden">