所有
我目前在我的应用程序中设置了slug,我生成以下链接:
http://www.domain.com/article/my-first-news-article
。
除了view
使用slug
代替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]'
)
);
为此,我真的不在乎将什么日期传递给视图。我只关心通过的slu ..然后我将使用function view($slug)
查找文章并显示它。但是,网址必须为http://www.domain.com/2012/06/27/slug-slug-slug
谢谢....
答案 0 :(得分:1)
$ this-> Html-> link()调用如何在您要在链接中使用日期的地方显示?
您是否在那里添加了所需的参数?
$this->Html->link('Article', array('year' => 2012, 'month' => 01, 'day' => 01, 'action' => 'view', 'slug' => $article['Article']['slug']));
答案 1 :(得分:1)
为了完整起见,并且因为其他人可能也对此感兴趣,我将向您展示我对类似问题的解决方案:
我想要格式为
的网址http://mydomain.com/blog/2012/06/slug-slug-slug
即。 /博客/ YYYY / MM /蛞蝓
为此,我使用
// 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-]+'
));
根据以下规则,您可以确保输入正确的格式。它还可以防止用户输入& " %等值作为slugs。
标题之后的/ *甚至允许其他参数,例如对于分页,当您的博客条目有多个页面(http://mydomain.com/blog/2012/06/slug/page:2
)时。
我也意识到设置"传递"数组并不是必需的(至少在CakePHP 2.0中)。您可以通过$ this - >直接访问参数。请求 - > params [' year']等。
答案 2 :(得分:0)
经过更多的研究和试验,我能够弄明白。
以下路线可以接受这样的网址:
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')
)
);