【问题标题】:cakePHP route element directs to missing controller action?cakePHP 路由元素指向缺少的控制器动作?
【发布时间】:2013-10-06 21:18:54
【问题描述】:

我正在尝试在 cakePHP 2.3 中设置以下路由:

域/新闻/slug

我遵循cookbook guidelines on routing 并且创建的路线是正确的。我遇到的问题是,在选择链接时,我收到“NewsController 中缺少方法”错误消息。

这是我的配置:

    Router::connect(
    '/news/:slug/', 
    array('controller' => 'news', 'action' => 'view'), 
    array(
        'pass' => array('slug'),
        'slug' => '[^_]+'
        )
    );

我使用正则表达式(任何不包含下划线的字符串)传入 slug。

这是我在索引页面中的链接:

        <?php echo $this->Html->link(
          $news['News']['title'], 
          array(
            'controller' => 'news',
            'action' => 'view',
            'slug' => $news['News']['slug']
            )
          ); ?>

如前所述,URL 构建正确,如下所示:/news/test-slug-news-story

但是当我点击它时,我会收到“NewsController 中缺少方法”错误消息

我错过了什么很明显吗,因为我看了太久而无法看到它。

谢谢,保罗

【问题讨论】:

  • 我会使用白名单而不是黑名单来匹配 slug。
  • 感谢 Martin,这是否等于白名单,'[a-zA-Z0-9_-]+'
  • 会的,是的。因为您要指定模式中应该的字符,而不是不应该的字符(如果您忘记将某些内容列入黑名单,这可能会导致错误) .过度谨慎总比不够谨慎好。

标签: php cakephp routing routes


【解决方案1】:

你可以试试这个:

<?php
// Routing code
Router::connect('/news/:slug/', 
    array(
        'controller' => 'news', 
        'action' => 'view'
    ), 
    array(
       'slug' => '[a-zA-Z0-9_-]+'
    )
);
?>

<?php 
// HTML Link code.    
echo $this->Html->link(
    $news['News']['title'], 
    array(
        'controller' => 'news',
        'action' => 'view',
        'slug' => $news['News']['slug']
    )
); 
?>

如果它不适合你,请告诉我:)

谢谢

【讨论】:

  • 谢谢 Vinod,我试过了,但没有用。但是,我确实发现了问题。它与从“/news/:slug/”中删除反斜杠有关,就是这样。似乎额外的反斜杠导致控制器将 slug 解释为控制器操作。
【解决方案2】:

如上所述,我发现通过在路由设置中的 'slug' 后面加上反斜杠,控制器将 ':slug/' 解释为控制器操作。

其中一个“doh”时刻。

代码应如下所示:

    Router::connect(
    '/news/:slug', 
    array('controller' => 'news', 'action' => 'view'), 
    array(
        'pass' => array('slug'),
        'slug' => '[a-zA-Z0-9_-]+'
        )
    );

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2018-06-07
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多