【问题标题】:CakePHP create route for post with slug and dateCakePHP 为带有 slug 和日期的帖子创建路由
【发布时间】:2014-06-26 09:35:34
【问题描述】:

现在我的 CakePHP 博客有这些路由

Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/blog/:slug', array('controller' => 'posts', 'action' => 'view'), array('pass' => array('slug')));

我想让我的帖子 URL 包含日期

/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)
);

【问题讨论】:

标签: php cakephp routing cakephp-2.0 cakephp-routing


【解决方案1】:

在路线中:

Router::connect('/blog/*', array('controller' => 'posts', 'action' => 'view'));

然后,在您的帖子控制器中,以这种方式定义操作:

public function view ($year, $month, $day, $slug) {}

至于自动将日期参数添加到您的链接中,我会编写一个带有函数的助手,该函数将接收帖子的数据数组,然后吐出您想要的链接。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2013-02-15
    • 2016-05-11
    • 2011-09-07
    • 1970-01-01
    • 2012-02-09
    • 2013-01-18
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多