微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CakePHP – 如何使用slug进行反向路由?

我正在使用CakePHP 1.3.我有一个产品型号.在DB表中,还有id和slug字段.

如果我的产品是id:37并且slug:My-Product-Title我希望产品的URL为:

products/37/My-Product-Title

而不是标准:

products/view/37

我创建了一个如下所示的路线:

Router::connect(
    '/products/:id/:slug',
    array('controller' => 'products', 'action' => 'view'),
    array('pass' => array('id'), 'id' => '[0-9]+')
);

现在我可以访问http:// server / products / 37 / My-Product-Title,它将我带到了正确的位置.

但是,如何在$HtmlHelper->链接自动构建正确的URL进行反向路由?

我用的时候:

echo $html->link(
    'Product 37', 
    array('controller'=>'products', 'action' => 'view', 37)
);

它仍然输出标准产品/ view / 37 url.

最佳答案:

我不相信它可以自动神奇地完成.帮助程序只是一个“帮助者”,它根据给定的参数构建链接.

所以最简单的方法是在链接添加一个参数,如下所示:

echo $html->link(
    'Product 37', 
    array('controller'=>'products', 'action' => 'view', 37, $slug)
);

$slug是slug字段中的数据.

可能它可以完成你的想法,但你需要非常严重地打破MVC模式:)

编辑:

再次阅读你的问题,我理解得很清楚.看看应该怎么做:

在您的router.PHP添加以下规则:

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

请注意,它是/ product / *而不是/ products / *

您的链接应该像这样完成:

echo $html->link(
    'Product 37', 
    array('controller'=>'products', 'action' => 'view', 37, 'my-product-title')
);

并且链接看起来像:

http://yourdomain.com/product/37/my-product-title

对我来说,你的建议是不好的做法.另外我认为从SEO的角度来看,总是用户重定向是不错的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐