【发布时间】: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->input('text_only_email', false) 但我想知道是否有人遇到过更优雅的解决方案,这样我就不需要继续检查服务器端了?
【问题讨论】:
标签: php eloquent laravel-5.1