【问题标题】:CakePHP 1.3: Use Route to get the following URL format /news/06/27/12/slug-slug-slugCakePHP 1.3:使用Route获取如下URL格式/news/06/27/12/slug-slug-slug
【发布时间】:2012-06-28 03:00:33
【问题描述】:

全部,

我目前在我的应用程序中设置了 slug,我在其中生成以下链接:

http://www.domain.com/article/my-first-news-article.

除了view接受slug而不是id之外,这是我用来完成此任务的当前路线:

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

但是,我想通过将发布日期添加到 URL 来进一步改进,如下所示:

http://www.domain.com/article/2012/06/27/my-first-news-article

我有以下来自 CakePHP 手册的代码,但它似乎不起作用:

        Router::connect(
        '/article/:year/:month/:day/:slug',
        array(
              'controller' => 'articles',
              'action' => 'view'
        ),
        array(
            'year' => '[12][0-9]{3}',
            'month' => '0[1-9]|1[012]',
            'day' => '0[1-9]|[12][0-9]|3[01]'
        )
    );

为此,我真的不在乎将什么日期传递给视图。我只关心通过的蛞蝓。然后我将使用function view($slug) 找到文章并显示它。但是 URL 需要是 http://www.domain.com/2012/06/27/slug-slug-slug

谢谢……

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    $this->Html->link() 调用在您想在链接中使用日期的地方看起来如何?

    您是否在那里添加所需的参数?

    $this->Html->link('Article', array('year' => 2012, 'month' => 01, 'day' => 01, 'action' => 'view', 'slug' => $article['Article']['slug']));
    

    【讨论】:

    • 嗨...我不认为形成链接是我现在的问题。我实际上是通过手动输入所有内容进行测试。我认为我的问题是如何实际路由所有内容
    • 我已经在上面发布了答案。感谢您的努力
    【解决方案2】:

    为了完整起见,也因为其他人可能对此感兴趣,我将向您展示我对类似问题的解决方案:

    我想要格式为

    的 URL
    http://mydomain.com/blog/2012/06/slug-slug-slug
    

    即/blog/yyyy/mm/slug

    为此,我使用

    // view a post by year and month and title
    Router::connect('/blog/:year/:month/:title/*', array(
      'controller' => 'posts',
      'action' => 'view'
    ), array(
      'year' => '[12][0-9]{3}',
      'month' => '0[1-9]|1[012]',
      'title' => '[a-z0-9-]+'
    ));
    

    通过以下规则,您可以确保输入正确的格式。它还可以防止用户输入诸如 &"% 之类的值作为 slug。

    标题后的 /* 甚至允许附加参数,例如用于分页,当您的博客条目有多个页面时 (http://mydomain.com/blog/2012/06/slug/page:2)。

    我也意识到设置“pass”数组并不是必须的(至少在 CakePHP 2.0 中)。可以直接通过 $this -> request -> params['year'] 等方式访问参数

    【讨论】:

      【解决方案3】:

      经过更多的研究和试验,我终于弄明白了。

      以下路由可以接受这样的 URL:

      http://www.mydomain.com/article/2009/06/10/my-first-article-in-mydomain-dot-com

      事实上,如何设置日期实际上并不重要,它仍然可以工作。也可能是,

      http://www.mydomain.com/article/06/10/2012/my-first-article-in-mydomain-dot-com

      Router::connect(
              '/article/:year/:month/:day/:slug',
              array(
                    'controller' => 'articles',
                    'action' => 'view'
              ),
              array(
                  'pass' => array('slug')
              )   
          );
      

      【讨论】:

        猜你喜欢
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 2011-09-07
        • 1970-01-01
        • 2017-05-30
        • 2020-10-22
        相关资源
        最近更新 更多