CakePHP 的 DynamicRoute 插件给出 404 错误
DynamicRoute Plugin for CakePHP giving 404 errors
我正在使用此插件在 CakePHP 2 网络应用程序上创建基于 slug 的 URL:https://github.com/josegonzalez/cakephp-dynamic-route
文档建议您像这样调用 Cake 控制器:
posts/view?id=45
我的 URL 目前是 Cake 的默认行为。因此,使用上面的示例 posts/view/45
有效,但 posts/view?id=45
无效。
当我按照示例调用 URL 时,出现 404 错误。
我的函数是这样写的(例如PostsController.php):
<code>public function view($id) {
// logic to load post by ID
// ...
}
以上插件几乎没有文档。有没有人使用过它或知道我哪里出错了?似乎你无法将 GET 变量(例如 'id' 传递给 'view' 函数,而不重构其中的代码以接受传递的参数?
解决方案似乎是需要重写一些控制器函数以接受 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
或 /manchester/cakephp-developers-dance-to-beyonce
。最初的问题是询问是否有一种方法可以将文档中给出的 "spec" 映射到 Cake 控制器函数 而无需 像我上面那样修改它。答案似乎是否定的,你必须修改它们!
我正在使用此插件在 CakePHP 2 网络应用程序上创建基于 slug 的 URL:https://github.com/josegonzalez/cakephp-dynamic-route
文档建议您像这样调用 Cake 控制器:
posts/view?id=45
我的 URL 目前是 Cake 的默认行为。因此,使用上面的示例 posts/view/45
有效,但 posts/view?id=45
无效。
当我按照示例调用 URL 时,出现 404 错误。
我的函数是这样写的(例如PostsController.php):
<code>public function view($id) {
// logic to load post by ID
// ...
}
以上插件几乎没有文档。有没有人使用过它或知道我哪里出错了?似乎你无法将 GET 变量(例如 'id' 传递给 'view' 函数,而不重构其中的代码以接受传递的参数?
解决方案似乎是需要重写一些控制器函数以接受 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
或 /manchester/cakephp-developers-dance-to-beyonce
。最初的问题是询问是否有一种方法可以将文档中给出的 "spec" 映射到 Cake 控制器函数 而无需 像我上面那样修改它。答案似乎是否定的,你必须修改它们!