【问题标题】:Working with checkbox input in Laravel 5.1在 Laravel 5.1 中使用复选框输入
【发布时间】:2015-12-07 05:38:39
【问题描述】:

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

 {!! 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。现在让我们说出于某种原因,我决定在重新提交之前取消选中回发后的复选框,或者说它是更新表单而不是创建表单,在这种情况下,隐藏字段值将保持设置为 true 因此表单提交没有按预期工作。

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

我知道它可以在服务器端通过使用这样的东西来实现:$request-&gt;input('text_only_email', false) 但我想知道是否有人遇到过更优雅的解决方案,这样我就不需要继续检查服务器端了?

【问题讨论】:

    标签: php eloquent laravel-5.1


    【解决方案1】:

    我认为您有两个同名字段,text_only_email 是一个隐藏输入以及一个复选框

    【讨论】:

    • 未选中的复选框不会向服务器发送任何值。因此,以上是确保将某些值发送回服务器的技巧。
    【解决方案2】:

    设法通过添加手动隐藏输入字段而不是使用表单生成器来生成它:&lt;input name="text_only_email" value="" type="hidden"&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-05
      • 2014-08-20
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多