0

全部,

我目前在我的应用程序中有 slug 设置,我在其中生成以下链接:

http://www.domain.com/article/my-first-news-article.

这是我用来完成此任务的当前路线,除了view接受 aslug而不是id

Router::connect('/article/*',array('controller' => 'articles', 'action' => 'view'));

但是,我想通过将发布日期添加到 URL 来进一步改进,如下所示:

http://www.domain.com/article/2012/06/27/my-first-news-article

我有来自 CakePHP 手册的以下代码,但它似乎不起作用:

        Router::connect(
        '/article/:year/:month/:day/:slug',
        array(
              'controller' => 'articles',
              'action' => 'view'
        ),
        array(
            'year' => '[12][0-9]{3}',
            'month' => '0[1-9]|1[012]',
            'day' => '0[1-9]|[12][0-9]|3[01]'
        )
    );

为此,我真的不在乎将什么日期传递给视图。我只关心通过的蛞蝓。然后我会用function view($slug)它来查找文章并显示它。但是 URL 必须是http://www.domain.com/2012/06/27/slug-slug-slug

谢谢....

4

3 回答 3

1

$this->Html->link() 调用在您想在链接中使用日期的地方看起来如何?

你在那里添加所需的参数吗?

$this->Html->link('Article', array('year' => 2012, 'month' => 01, 'day' => 01, 'action' => 'view', 'slug' => $article['Article']['slug']));
于 2012-06-28T09:08:04.570 回答
1

为了完整起见,并且因为其他人可能对此也感兴趣,我将向您展示我对类似问题的解决方案:

我想要格式的 URL

http://mydomain.com/blog/2012/06/slug-slug-slug

即/blog/yyyy/mm/slug

为此,我使用

// view a post by year and month and title
Router::connect('/blog/:year/:month/:title/*', array(
  'controller' => 'posts',
  'action' => 'view'
), array(
  'year' => '[12][0-9]{3}',
  'month' => '0[1-9]|1[012]',
  'title' => '[a-z0-9-]+'
));

使用以下规则,您可以确保输入正确的格式。它还可以防止用户输入诸如 & " % 之类的值作为 slug。

http://mydomain.com/blog/2012/06/slug/page:2当您的博客条目有多个页面 ( )时,标题后的 /* 甚至允许附加参数,例如用于分页。

我也意识到设置“pass”数组并不是必须的(至少在 CakePHP 2.0 中)。您可以通过 $this -> request -> params['year'] 等直接访问参数。

于 2012-06-28T20:12:18.270 回答
0

经过更多的研究和试验,我能够弄清楚。

以下路由可以接受这样的 URL:

http://www.mydomain.com/article/2009/06/10/my-first-article-in-mydomain-dot-com.

事实上,如何设置日期实际上并不重要,它仍然可以工作。也可能是,

http://www.mydomain.com/article/06/10/2012/my-first-article-in-mydomain-dot-com

Router::connect(
        '/article/:year/:month/:day/:slug',
        array(
              'controller' => 'articles',
              'action' => 'view'
        ),
        array(
            'pass' => array('slug')
        )   
    );
于 2012-06-28T13:55:33.093 回答