全,
我目前在我的应用程序中设置了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]'
)
);出于这个原因,我真的不关心什么日期被传递给视图。我只关心通过的弹头。然后,我将使用function view($slug)查找文章并显示它。但是,URL必须为http://www.domain.com/2012/06/27/slug-slug-slug。
谢谢你……
发布于 2012-06-28 21:55:33
经过更多的研究和试验,我终于找到了答案。
以下路由将接受类似如下的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-28 17:08:05
在您想要在链接中使用日期的地方,$this->Html-> link ()调用是什么样子的?
您是否在那里添加了所需的参数?
$this->Html->link('Article', array('year' => 2012, 'month' => 01, 'day' => 01, 'action' => 'view', 'slug' => $article['Article']['slug']));发布于 2012-06-29 04:12:18
为了完整起见,也因为其他人可能也对此感兴趣,我将向您展示我对类似问题的解决方案:
我希望URLS的格式为
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-]+'
));使用下面的规则,您可以确保输入正确的格式。它还可以防止用户输入诸如&"%之类的值作为slugs。
标题后的/*甚至允许额外的参数,例如,当您的博客条目有多个页面(http://mydomain.com/blog/2012/06/slug/page:2)时,用于分页。
我还意识到设置"pass“数组并不是真正必要的(至少在CakePHP 2.0中是这样)。您可以通过$this -> request -> params‘’year‘等方式直接获取参数。
https://stackoverflow.com/questions/11237510
复制相似问题