php - 如何通过单击 Twig 中的链接(或按钮)来更改 _$GET[] 中的一个值而不更改其他值?
问题描述
我还有其他搜索查询,例如来自搜索的查询、来自标签的查询等。我不想更改它们。pageno 值将用于分页。
所以我想改变'pageno'而不改变或取消其他。
这就是我在 Twig 中所做的:
<a href=?{{ request.server.get('QUERY_STRING')|replace({"&pageno=" : ""}) }}&pageno={{ page }}>{{ page }}</a>
但它给出的结果如下: ?query=&from-date=&to-date=&search=search413&pageno=5
当您从一个页面导航到另一个页面时收集以前的页码“413”,它总是添加一个“&”。
我尝试的另一种方法是在 php 中创建一个字符串,并将其传递给 Twig 模板:
$queryStr = $request->server->get('QUERY_STRING');
$queryStr = preg_replace("/pageno=\\w+/", "", $queryStr); // Remove pageno=???
$queryStr = $queryStr == "" ? "" : ($queryStr . "&"); // ad a & if there's already other $_GET values
$queryStr = str_replace("&&","&", $queryStr); // replace && so it doesn't look bad
在树枝中:
<a href=?{{ queryStr }}pageno={{ page }}>{{ page }}</a>
这看起来太棘手了,完成了太多的工作,我正在向 Twig 传递很多值。
有没有一种更简单的方法来做到这一点,而不必将这么多的值传递给 Twig?
解决方案
Just create a twig
function like this:
$twig->addFunction(new \Twig\TwigFunction('get_page_url', function($query = [], $append = true) {
$tmp = $append ? $_GET : [];
foreach($query as $key => $value) $tmp[$key] = $value;
return '?' . http_build_query($tmp);
});
Use it in twig
like
<a href="{{ get_page_url({ 'pageno': 42, }) }}">next</a>
推荐阅读
- ios - iOS:是否可以通过代码打开原生镜像屏幕弹窗?
- python - 从数据框中的单个值列表中检索值,其中空列表也在数据框中
- python-3.x - 错误:无法打开 osm 文件“accesoeste.net.xml”。错误:未加载节点
- azure-data-factory-2 - Azure 数据工厂 - 使用集成运行时运行数据流
- uitableview - 这段代码背后的原因是什么导致内存泄漏,而 tableView 单元格中的 deque Cell 用于索引路径处的行
- java - servlet.service 错误,classNotFoundException
- r - 如何修复R中非数字矩阵中的错误
- swiftui - 警报视图 - 在切换结果中
- c - 数据类型范围的真正含义是什么?
- javascript - 如何在reactjs中检查以带有Route hook的短语开头的随机生成的url