【问题标题】:CakePHP route URL not found!找不到 CakePHP 路由 URL!
【发布时间】:2011-07-23 00:09:06
【问题描述】:

我正在尝试在我的网站上进行一些自定义路由,但在一个非常愚蠢的问题上卡住了 2 天。我有以下路由配置:

Router::connect('/your-solution/add-comment/*', array('controller' => 'comments', 'action' => 'add'));
Router::connect('/admin/your-solution/add-comment/*', array('controller' => 'comments', 'action' => 'add', 'admin' => true));

问题是,当我尝试加载使用第二条路由格式化的 URL 时,它给了我一个 404 未找到。 第一条规则很好用。

对于这两个规则,我有一个单独的元素,其中包含一个表单并指向在相应规则之后格式化的 URL。这两个操作的唯一参数是解决方案 ID,它“包含”在通配符中。

可能是什么问题?非常感谢您的帮助!

编辑:

我发现了另一个奇怪的行为。当我访问/admin/your-solution/add-comment/3 时,它会执行该操作。但是,如果我向该链接提交表单,它会显示一个空白页面,Firebug 会通知我找不到该页面。很奇怪... 另外,我也有类似的编辑 cmets 的路线。加载编辑表单和保存表单工作...

【问题讨论】:

    标签: cakephp routing


    【解决方案1】:

    显然,问题在于禁用的输入。删除此元素后,表单正确提交并显示目标页面。

    据我所知,如果表单中有禁用的输入,为什么不提交?

    【讨论】:

    • 查看我在 Linkyndy 上方的评论!这是因为 SecurityComponent 期望使用 FormHelper 创建所有输入(即:$form->input())。如果这是给您带来麻烦的字段,您可以将其添加到 $disabledFields 数组中。干杯!
    • 我已经检查了您的答案,但表单是使用 FormHelper 创建的。我暂时删除了该字段,一切正常。无论如何,如何将字段添加到 $disabledFields 数组?从控制器内部?没有任何方法可以禁用视图中的字段吗?为什么禁用字段会产生空白页和 404 错误?
    【解决方案2】:

    确保在你的 core.php 中

    Configure::write('Routing.prefixes', array('admin'));

    在你的 cmets 控制器中,确保你有

    function admin_add() {...}
    

    还可以尝试其他格式化路由语句的方式。

    Router::connect('/admin/your-solution/add-comment', array('controller' => 'comments', 'action' => 'add', 'admin' => true));
    

    路线的顺序也很重要。你可能想检查一下。

    为了调试您在加载 URL 时使用的路由,请尝试将此代码添加到您的 app_controller.php 文件中。

    function __construct() {
        $route = Router::currentRoute();
        pr($route);
    }
    

    这些只是一些提示,希望能帮助您继续前进。

    【讨论】:

    • 感谢所有这些提示!我有前两个。您发布的路由格式不包含任何额外参数(例如我需要的解决方案 ID),因此它不起作用。我应该尝试哪些其他替代路线格式?我想我已经尝试了所有可能的组合。我什至尝试删除除此之外的任何其他路线,但仍然找不到该页面...
    【解决方案3】:

    你好吗?

    要确切了解它为什么不起作用,请转到 /app/config/core.php 并查找此行:

    Configure::write('debug', 2);
    

    并确保该值设置为“2”。这样一来,它就不再给你一个 404 错误,而是真正的问题,因为在生产模式下(调试设置为 0),所有错误都被一个 404 错误所掩盖。

    告诉我!

    干杯!

    【讨论】:

    • 嗨。谢谢提问,我很好。调试级别设置为 2。问题是,它没有显示明确的 404 错误,而是显示空白页面,当我查看 Firebug 时,它显示“找不到页面”错误。
    • 您在使用安全组件吗?如果是这样,请尝试在您的 CommentsController 方法中添加 "beforeFilter", $this->Security->validatePost = false;看看它是否有效。如果它有效,那是因为某些东西正在修改组件生成的 _token。更多cakePHP
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多