在CakePHP中使用日期作为路线

时间:2012-09-01 10:48:44

标签: php cakephp

我在视图中有以下链接,通过传递帖子的日期和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')
                ));

1 个答案:

答案 0 :(得分:1)

你正在使用蛋糕2吗?如果你这样做,你可以试试这个,正如书中所说:

  

除了贪婪的明星/*之外,还有/**尾随星   句法。使用尾随双星,将捕获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]'
    )
);