现在我的CakePHP博客有这些路线
Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/blog/:slug', array('controller' => 'posts', 'action' => 'view'), array('pass' => array('slug')));
我希望我的帖子网址包含日期
/blog/2014/05/08/post-slug
如何设置我的路线/动作以适应这种情况?我可以在创建像这样的链接时使用它吗
echo $this->Html->link(
$post['Post']['title'],
array('action' => 'view', 'slug'=>$post['Post']['slug'])
);
它会自动添加日期参数吗?
更新
我得到了它的工作
我创建了这条路线
Router::connect('/blog/:year/:month/:day/:slug', array('controller'=>'posts', 'action' => 'view'),
array(
'year' => '[12][0-9]{3}',
'month' => '0[1-9]|1[012]',
'day' => '0[1-9]|[12][0-9]|3[01]',
'pass' => array('year', 'month', 'day', 'slug')
)
而不是为此创建自己的帮助器,我只是覆盖了AppHelper中的url方法
class AppHelper extends Helper {
public function url($url = null, $full = false) {
if(is_array($url)) {
// add dates to posts
if(isset($url['post'])) {
$url['slug'] = $url['post']['Post']['slug'];
if(!empty($url['post']['Post']['published'])) {
$url['year'] = date('Y', strtotime($url['post']['Post']['published']));
$url['month'] = date('m', strtotime($url['post']['Post']['published']));
$url['day'] = date('d', strtotime($url['post']['Post']['published']));
}
unset($url['post']);
}
}
return parent::url($url, $full);
}
}
然后我用
创建链接echo $this->Html->link(
$post['Post']['title'],
array('action' => 'view', 'post'=>$post)
);
答案 0 :(得分:0)
在路线中:
Router::connect('/blog/*', array('controller' => 'posts', 'action' => 'view'));
然后,在你的帖子控制器中,用这种方式定义动作:
public function view ($year, $month, $day, $slug) {}
至于自动将日期参数添加到链接中,我会编写一个带有函数的帮助程序,该函数将接收帖子的数据数组,然后吐出所需的链接。