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

Gab*_*eri 1 cakephp

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

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

基本上"rLbu78h2RpVwLTy/bki3pK1NkkXhCCaYfQ/zXDIfZR4 ="是一个参数,但滤饼仅识别它,直到拳头斜线的第一部分.

当打印命名的params数组时,我得到:

Array
(
    [user] => rLbu78h2RpVwLTy
)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

AD7*_*six 6

不要使用命名参数

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

使用尾随星形路线

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

/claim/index/<user token>
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用尾随星型路线来捕获/index/在单个变量之后发生的每一个事物:

Router::connect(
    '/claim/index/**',
    array('controller' => 'claims', 'action' => 'index')
);
Run Code Online (Sandbox Code Playgroud)

通过这种方式,/index/在您的索引操作中收到它之后会发生什么并不重要:

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

function index($user) {
    // $user === 'rLbu78h2RpVwLTy/bki3pK1NkkXhCCaYfQ/zXDIfZR4='
}
Run Code Online (Sandbox Code Playgroud)