2011-10-28 38 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 

} 

希望這有助於:-)

相關問題