我使用此插件在CakePHP 2网络应用程序上创建基于slug的URL:https://github.com/josegonzalez/cakephp-dynamic-route
文档建议您像这样调用Cake控制器:
posts/view?id=45
我的网址目前是Cake的默认行为。因此,使用上面的示例posts/view/45
有效但posts/view?id=45
没有。
当我根据示例调用URL时,我收到404错误。
我的函数是这样写的(例如在PostsController.php中):
public function view($id) {
// logic to load post by ID
// ...
}
上述插件几乎没有文档。有没有人使用它或知道我哪里出错了?您似乎无法传递GET变量,例如' id'查看'函数,没有重新分解其中的代码来接受传递的参数?
答案 0 :(得分:0)
解决方案似乎是需要重新编写一些控制器函数来接受GET样式参数。
在文档中,“spec”字段如下所示:
posts/view?id=45
在常规CakePHP应用程序中,其路由如下:posts/view/45
如果您将第二种路线(posts / view / 45)放入“spec”字段,插件就无法使用。
所以答案是“spec”字段必须如此:
posts/view?id=45
然后必须重写您的控制器功能,例如
public function view($id) {
if (isset($this->request->params['id'])) {
$id = $this->request->params['id'];
}
}
这样做意味着它可以使用参数(view?id = 45)或标准Cake调用(view / 45)。
请注意这与插件的“slug”方面无关 - 根据文档示例,“slug”可以是任何内容:/why-isnt-this-pup-asleep
或{{1 }}。最初的问题是询问是否有办法将文档中给出的“规范”映射到Cake控制器函数,而不必像上面那样修改它。答案似乎不是,你必须修改它们!