CakePHP允许正斜杠作为命名参数值

时间:2013-03-20 16:55:11

标签: cakephp

我正在使用cakePHP而陷入困境。我想将一个命名参数传递给包含正斜杠的动作。例如

http://www.test.com/claim/index/user:rLbu78h2RpVwLTy/bki3pK1NkkXhCCaYfQ/zXDIfZR4=

基本上“rLbu78h2RpVwLTy / bki3pK1NkkXhCCaYfQ / zXDIfZR4 =”是一个参数,但蛋糕只识别它的第一部分直到第一个斜线。

打印指定的params数组时,我得到:

Array
(
    [user] => rLbu78h2RpVwLTy
)

如何逃避正斜杠并允许蛋糕接受它作为命名参数的一部分?

谢谢

1 个答案:

答案 0 :(得分:6)

不要使用命名参数

虽然可以使用命名参数(/foo/this-is:a-named-parameter/),但最好坚持使用普通的url位置/路径参数和/或GET参数。随着时间的推移,使用命名参数传递信息已被证明不是一个很好的解决方案。

使用尾随星号路径

如果您修改了您正在使用的网址格式,例如:

/claim/index/<user token>

然后,您可以使用trailing star route来捕获/index/之后在单个变量中发生的所有事情:

Router::connect(
    '/claim/index/**',
    array('controller' => 'claims', 'action' => 'index')
);

通过这种方式,您在索引操作中收到/index/之后的内容并不重要:

// Request to /index/rLbu78h2RpVwLTy/bki3pK1NkkXhCCaYfQ/zXDIfZR4=

function index($user) {
    // $user === 'rLbu78h2RpVwLTy/bki3pK1NkkXhCCaYfQ/zXDIfZR4='
}