我在视图中有以下链接,通过传递帖子的日期和slug来调用帖子:
<?php echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view', 'date'=>date('Y/m', strtotime($post['Post']['datetime'])), 'slug'=> $post['Post']['slug'])); ?></h2>
<h4><?php echo $post['Post']['datetime']; ?><
正如您所看到的,我使用strtotime使日期时间更漂亮,以便在URL中使用。
我实际上并没有使用控制器中的日期来将帖子从数据库中拉出来,只是把它拖出来,所以它并不重要。
问题是因为日期中有一个/
,路由器会感到困惑并认为它是网址的两个独立部分。我该如何解决这个问题?
我的路线如下:
Router::connect('/news/:date/:slug',
array('controller' => 'posts', 'action' => 'view'),
array(
//'date' => '[A-Za-z0-9\._]+',
'slug' => '[A-Za-z0-9\._]+',
'pass' => array('date', 'slug')
));
答案 0 :(得分:1)
除了贪婪的明星
/*
之外,还有/**
尾随星 句法。使用尾随双星,将捕获a的剩余部分 URL作为单个传递的参数。这在您想要使用时很有用 一个包含/的参数:
<?php
Router::connect(
'/pages/**',
array('controller' => 'pages', 'action' => 'show') );
?>
/ pages / the-example - / - and-proof的传入URL将导致a 单例传递的示例 - / - 和 - 证明。
但我想你应该首先通过slu ..
否则,您可以按/
(或其他任何内容)更改-
。但是,如果你想保留它们,你可以在路线中将日期声明为分开的参数,例如:
Router::connect(
'/news/:year/:month/:day',
array('controller' => 'posts', 'action' => 'view', 'day' => null),
array(
'year' => '[12][0-9]{3}',
'month' => '0[1-9]|1[012]',
'day' => '0[1-9]|[12][0-9]|3[01]'
)
);