首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >slug 1.3:使用路由获取以下URL格式/ CakePHP /06/27/12/slug-slug-slug

slug 1.3:使用路由获取以下URL格式/ CakePHP /06/27/12/slug-slug-slug
EN

Stack Overflow用户
提问于 2012-06-28 11:00:34
回答 3查看 778关注 0票数 0

全,

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

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

除了view接受slug而不是id之外,这就是我用来实现这一点的当前路由

代码语言:javascript
复制
Router::connect('/article/*',array('controller' => 'articles', 'action' => 'view'));

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

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

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

代码语言:javascript
复制
        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

谢谢你……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-28 21:55:33

经过更多的研究和试验,我终于找到了答案。

以下路由将接受类似如下的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

代码语言:javascript
复制
Router::connect(
        '/article/:year/:month/:day/:slug',
        array(
              'controller' => 'articles',
              'action' => 'view'
        ),
        array(
            'pass' => array('slug')
        )   
    );
票数 0
EN

Stack Overflow用户

发布于 2012-06-28 17:08:05

在您想要在链接中使用日期的地方,$this->Html-> link ()调用是什么样子的?

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

代码语言:javascript
复制
$this->Html->link('Article', array('year' => 2012, 'month' => 01, 'day' => 01, 'action' => 'view', 'slug' => $article['Article']['slug']));
票数 1
EN

Stack Overflow用户

发布于 2012-06-29 04:12:18

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

我希望URLS的格式为

代码语言:javascript
复制
http://mydomain.com/blog/2012/06/slug-slug-slug

即/blog/yyyy/mm/slug

为此,我使用

代码语言:javascript
复制
// 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-]+'
));

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

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

我还意识到设置"pass“数组并不是真正必要的(至少在CakePHP 2.0中是这样)。您可以通过$this -> request -> params‘’year‘等方式直接获取参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11237510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档