我想问一下,关于策略,我该如何存档:
我有网址:www.mydomain.com/pages
现在,如果某些if clausure将返回true,我想将此参数附加到所有网址:
www.mydomain.com/pages?id=swa或 www.mydomain.com?id=swa
我不知道如何开始, 谢谢你的帮助。
答案 0 :(得分:0)
您最好的选择可能是使用网址过滤器,它会影响使用核心助手或Router
类生成的所有网址,只要它们作为routing arrays传递即可,即
['controller' => 'abc', 'action' => 'xyz', /* ... */]
作为字符串传递的网址,例如/abc/xyz
不会受到影响!
\Cake\Routing\Router::addUrlFilter(function ($params, $request) {
$key = 'id';
$value = 'swa';
if (!array_key_exists($key, $params)) {
$params[$key] = $value;
}
return $params;
});
这会将参数添加到所有URL(除非它们已经具有该参数集)。但要小心,如果有匹配的连接路由定义了具有相同名称的路由元素,它将窃取参数并将其用于元素,而不是将其添加到查询字符串中!
另请注意,这只会影响明确定义操作网址的表单操作,如果您希望它影响那些提取当前网址的操作网址,那么您还需要修改$request->query
$request->query[$key] = $value;
另见
答案 1 :(得分:0)
如果是一次性的,你可以使用重定向
来做到这一点return $this->redirect(['controller' => 'Pages', 'action' => 'display', $pageId]);
或通过html帮助
echo $this->Html->link(
'Page 1',
['controller' => 'Pages', 'action' => 'display', 1]
);