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 控制器函数 而无需 像我上面那样修改它。答案似乎是否定的,你必须修改它们!