gpt4 book ai didi

php - 如何在 ZF2 的分页 URL 中保留查询参数?

转载 作者:可可西里 更新时间:2023-11-01 13:28:15 26 4
gpt4 key购买 nike

我正在使用 Zend\Paginator 构建分页结果集。这工作正常,但是,在添加搜索表单后,我无法让两者一起很好地发挥作用。

页面上的搜索表单生成的 URL 是:

user/index/?searchTerm=hello

如何修改 Zend 分页器配置,使其在生成的 URL 中保留 searchTerm?

我希望是这样的:

user/index/page/4/?searchTerm=hello

我错过了什么?


模块配置路由定义如下:

'user' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/user[/[:action[/]]][[id/:id]][/[page/:page]]',
'defaults' => array(
'controller' => 'Application\Controller\User',
'action' => 'index',
'id' => null,
),

// the below was added to try and get the searchTerm query to be retained
'may_terminate' => true,
'child_routes' => array(
'searchTerm' => array(
'type' => 'Query',
),
),
),
),

分页是在 View 中使用它构造的:

echo $this->paginationControl(
$this->users, 'sliding', array('paginator', 'User'), array('route' => 'user', 'action' => 'index')
);

分页模板片段:

    <li>
<a href="<?php echo $this->url($this->route, array('action' => $this->action, 'page' => $this->next), true); ?>">
Next &raquo;
</a>
</li>

(我的印象是将 true 作为 third parameter to url() would retain the query params 传递。)

最佳答案

我现在看到了 url() 的第三个参数在做什么。我可以简化分页链接并删除“操作”键,如下所示:

<a href="<?php echo $this->url($this->route, array('page' => $this->next), true); ?>">

页面的操作作为 URL 的一部分进行匹配(由于第三个参数为真),这就是它起作用的原因。出于同样的原因,我可以将路由更改为:

'route' => '/user[/[:action[/]]][[id/:id]][/[page/:page]][/[search/:search]]',

然后 search 将保留在分页链接中。

如果我修改搜索表单以通过 JavaScript 提交,我可以构建搜索 URL 并将用户定向到它。

该方法的简单 jQuery 示例:

$(".search-form").submit(function() {
var baseUrl = $(this).attr('action'),
search = $(this).find('.search').val();

window.location = baseUrl + '/search/' + search;

return false;
});

另一种选择是在收到 searchTerm 查询时重定向到 Controller 中的 current/route/search/term 路由。

我将此作为答案发布,但我愿意接受更好的解决方案。

关于php - 如何在 ZF2 的分页 URL 中保留查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com