据我了解,您面临两个问题:在分页请求中保留已检查的项目,并将已检查的项目检索回视图。
为了在分页请求中保留已检查的项目,我会将已检查的项目刷新到 Session 中。控制器方法如下所示。
public function fill_form()
{
$items = Item::paginate(25);
// Retrieve checked items in session.
$checked_items = []
if (Session::has('checked_items'))
$checked_items = Session::get('checked_items');
// Persist new checked items.
$checked_items = array_merge($checked_items, Input::get('item'));
Session::flash('checked_items', $checked_items);
return View::make('form')
->with('items', $items);
}
如您所见,选中的项目将在分页请求中的会话中可用。
现在,为了将选中的项目显示回视图,我将通过旧输入将会话中的选中项目发送到视图。也就是说,返回值将更改如下。
public function fill_form()
{
# code intentionally omitted #
return View::make('form')
->with('items', $items)
->withInput($checked_items);
}
然后在您的视图中,选中的项目将保留它们的选中值。显然,你应该使用 Laravel 来生成你的 checkboxes。
如何在提交时获取所有项目(选中或未选中)?
也许,如果您正在渲染带有复选框的项目,您将需要知道哪些复选框被选中,哪些没有在分页时被选中。一个简单的解决方案是为每个带有默认值的复选框添加一个额外的输入隐藏字段,如下所示:
{{ Form::hidden('item1', 'off') }}
{{ Form::checkbox('item1', 'on') }}
{{ Form::hidden('item2', 'off') }}
{{ Form::checkbox('item2', 'on') }}
{{ Form::hidden('item3', 'off') }}
{{ Form::checkbox('item3', 'on') }}
提交表单后,分页时,选中的项目将收到期望值,未选中的将收到隐藏值。
注意 1,将隐藏的输入放在每个复选框
之前很重要。注意 2,每个隐藏的输入应该与复选框具有相同的名称。