0

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

域/新闻/蛞蝓

我遵循了关于路由的食谱指南, 并且创建的路由是正确的。我遇到的问题是,在选择链接时,我收到“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 中缺少方法”错误消息

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

谢谢,保罗

4

2 回答 2

0

你可以试试这个:

<?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']
    )
); 
?>

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

谢谢

于 2013-10-07T10:38:49.403 回答
0

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

那些“doh”时刻之一。

代码应如下所示:

    Router::connect(
    '/news/:slug', 
    array('controller' => 'news', 'action' => 'view'), 
    array(
        'pass' => array('slug'),
        'slug' => '[a-zA-Z0-9_-]+'
        )
    );
于 2013-10-07T14:40:31.153 回答