2011-10-28 37 views
1

我正在创建一个社交网站,因为每个个人资料页面都需要使用seo友好的网址来显示。如何从cakephp中的控制器动作设置url?

现在它的样子www.siteprof.com/profile/23
我需要在此网址的末尾添加aditioanl字符串'jake-web-developer'。结果将会像www.siteprof.com/profile/23/jake-web-developer。我知道这可以在我们创建个人资料链接时完成。但是如果有人使用www.siteprof.com/profile/23这个链接访问这个配置文件,我可以将以前的文本添加到网址吗?

也有任何方法来添加这些类型的特定字符串到控制器操作的URL?

回答

0

这看起来并不正确,由CakePHP的约定,它应该看起来像:

**www.siteprof.com/profiles/view/23** 

之后,你设置了profiles_controller有行动view($id=0,$name="") 我不知道为什么这很重要,但你可以生成具有name参数链接和它仍然能工作:

www.siteprof.com/profiles/view/23/jake-web-developer 

如果添加的最后一个字符串是很重要的,那么你应该做的视图控制器重定向。检查是否指定了$ name,如果不是,则重定向到具有该名称的URL,但我建议不要这样做,因为这是性能问题。

+0

你当然可以有www.siteprof.com/profiles/view/23/jake-web-developer和view($ id)的方法签名。 Cake将有利地忽略'jake-web-developer'部分 – RichardAtHome

+0

但是你不能拥有的是:www.siteprof.com/profile/23/jake-web-developer。 (在URL中缺少“action”,除非该操作被称为“23”) –

+1

在我的route.php中,我将此重定向到配置文件/视图/ 23 – benji

0

我的解决方案将是把自定义的重定向头在页面如果URL中不包含搜索引擎友好的称号会被重定向到的完整URL

一个方法是:

public function view($id = null, $slug = null) { 

    $data = $this->Profile->findById($id); 

    if ($slug == null) { 

    $this->redirect(array('action'=>$view, $id, $data['Profile']['slug'])); 

    } 

    // .. rest of view logic 

} 

希望这有助于:-)

相关问题