CakePHP 3向url添加其他数据的最佳方法

时间:2015-07-29 09:54:45

标签: php cakephp-3.0

我想问一下,关于策略,我该如何存档:

我有网址:www.mydomain.com/pages

现在,如果某些if clausure将返回true,我想将此参数附加到所有网址:

www.mydomain.com/pages?id=swa或 www.mydomain.com?id=swa

我不知道如何开始, 谢谢你的帮助。

2 个答案:

答案 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]
);