0

我的视图中有以下链接,它通过传递帖子的日期和 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 中使用。

我实际上并没有使用控制器中的日期来将帖子从数据库中拉出,只是使用蛞蝓,所以它并不重要。

然而问题在于,由于日期中有一个/,路由器会感到困惑并认为它是 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')
                ));
4

1 回答 1

1

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

除了贪心星之外,/*还有/**尾星语法。使用尾随双星,将捕获 URL 的其余部分作为单个传递的参数。当您想使用包含 / 的参数时,这很有用:

<?php
Router::connect(
    '/pages/**',
    array('controller' => 'pages', 'action' => 'show') );
?>

/pages/the-example-/-and-proof 的传入 URL 将导致 the-example-/-and-proof 的单个传递参数。

但我想你应该先通过slug。

否则,您可以更改您/的 by -(或其他任何内容)。但是,如果您想保留它们,您可以将日期声明为路由中的单独参数,例如:

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]'
    )
);
于 2012-09-01T11:56:40.053 回答