【问题标题】:Laravel 5.2 - Paginator appending checkbox array?Laravel 5.2 - 分页器附加复选框数组?
【发布时间】:2017-10-22 00:32:03
【问题描述】:

是否可以将复选框数组附加到分页器?例如我有以下表格:

<form method="GET" action="/search" >

   <input type="checkbox" name="foo[]" value="bar1" {{ in_array('bar1', $foo) ? 'checked': '';}}>
   <input type="checkbox" name="foo[]" value="bar2" {{ in_array('bar2', $foo) ? 'checked': '';}}>
   <input type="checkbox" name="foo[]" value="bar3" {{ in_array('bar3', $foo) ? 'checked': '';}}>

   <input type="submit" value="submit">
</form>

 @foreach($users as $user)
    //list users
 @endforeach

{{ $users->appends(['foo' => $foo ])->links() }}

还有一个控制器动作如下:

public function search(Request $request)
{

    $foo = $request->input('foo');

    // Get all users where they have foo
    $users = $this->userRepository->getByFilters($foo)->paginate(10); 

    return view('search', compact('users', 'foo');
}

如果选择了 bar1 和 bar2,则应该生成分页器链接:

/search?foo[]=bar1&foo[]=bar2

或者我应该以其他方式在 url 中为分页器链接传递表单数组值,即爆炸或内爆 foo 数组?

任何建议表示赞赏。

【问题讨论】:

  • 分页器的appends方法可能不适用于数组,您可以尝试为数组的每个项目调用它。

标签: php arrays laravel pagination laravel-5.2


【解决方案1】:

当您通过{{ $users-&gt;appends(['foo' =&gt; $foo ])-&gt;links() }} 将数据附加到分页链接时,这会在 php 脚本执行时设置值。因此,它不会在更改表单元素时被更改。

如果您需要在用户点击它们之前检测到选中的项目并将它们附加到链接中,您可能必须使用 JavaScript 方法。

从您的代码中,我可以看到表单项已提交,并且相应的分页应包含先前选择的选项。为此,您可以在对结果进行分页时在后端附加请求查询字符串。

$users = $this->userRepository->getByFilters($foo)->paginate(10);
$users->appends(request()->query());

【讨论】:

  • 如果您使用$users-&gt;appends(request()-&gt;query());,如果需要,您如何排除某些字段?
  • @adam78 只取必填字段request()-&gt;only('foo', 'bar');,跳过部分字段request()-&gt;except('foo', 'bar');
【解决方案2】:

我已将代码重构如下,因此现在复选框数组的查询字符串值生成为逗号分隔值。如果有人知道更优雅的灵魂,请随时发表评论和改进。

表格

 <form method="GET" action="/search" >
   <?php $checkedFoo = explode(',', $foo); ?>

   <input type="checkbox" name="foo[]" value="bar1" {{ in_array('bar1', $checkedFoo) ? 'checked': '';}}>
   <input type="checkbox" name="foo[]" value="bar2" {{ in_array('bar2', $checkedFoo) ? 'checked': '';}}>
   <input type="checkbox" name="foo[]" value="bar3" {{ in_array('bar3', $checkedFoo) ? 'checked': '';}}>

   <input type="submit" value="submit">
</form>

 {{ $users->appends(['foo' => $foo ])->links() }}

控制器动作

public function search(Request $request)
{

    $foo = is_array($request->input('foo')) ? implode(",",   $request->input('foo')) : $request->input('foo');

    $users = $this->userRepository->getByFilters($foo)->paginate(10); 

    return view('search', compact('users', 'foo');
}

如果选择了 bar1 和 bar2,则现在生成分页器链接:

?foo=bar1,bar2    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2016-07-27
    • 2017-11-02
    • 1970-01-01
    • 2016-11-25
    • 2020-01-16
    • 2017-04-01
    相关资源
    最近更新 更多