2013-03-05 97 views
0

我有自己設定的路徑的各種產品。例如:YII完全自定義路徑?

  1. 電子/ MP3播放器/索尼hg122
  2. 健身/設備/ gymboss

如果希望能夠訪問此網址格式。例如:

http://www.mysite.com/fitness/devices/gymboss 
http://www.mysite.com/electronics/mp3-players/sony-hg122 

我的策略是覆蓋SiteController的「初始化」功能,以趕路徑,然後直接到我自己的實現渲染功能。但是,這不能讓我抓住路徑。

我對此有錯嗎?這樣做的正確策略是什麼?

**編輯**

我想,我必須利用URL manager的。但是,如果它們都是在數據庫中定製的,我該如何動態添加路徑格式?

回答

2

愛斯基摩人的設置是對於大多數系統的Yii了良好穩固的做法發表評論。但是,對於你的,我建議創建一個自定義的UrlRule來查詢你的數據庫: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#using-custom-url-rule-classes

注意:URL規則在每個Yii請求上都被解析,所以要小心。如果你效率不高,你可以迅速減慢你的網站。默認情況下,規則被緩存(如果你有一個緩存設置),但我不知道這是否適用於動態DB規則(我不認爲)。

+0

不錯的答案,很高興看到不同的方法。 Upvoted – 2013-03-05 22:54:58

+0

愚蠢的問題,但在這個例子中,你會在哪裏放置文件?新的CarUrlRule類文件? – coderama 2013-03-07 19:09:09

+0

可能在你的組件文件夾中 – acorncom 2013-03-07 19:51:38

1

在您的網址經理(保護/配置/ main.php),設置urlFormatpath(和toptionally設置showScriptNamefalse(這個隱藏URL的index.php的一部分))

'urlManager' => array(
    'urlFormat' => 'path', 
    'showScriptName'=>false, 

接下來,在你的規則,你可以設置類似:

catalogue/<category_url:.+>/<product_url:.+> => product/view, 

所以這樣做是什麼路線,並要求與像目錄/ EL的結構ectronics/ipodsProductController actionView。然後,您可以訪問URL的category_urlproduct_url部分,像這樣:

$_GET['category_url']; 
$_GET['product_url']; 

這個規則是如何工作的,它與字目錄(你的域名後直接)開頭的URL後面是另一個詞( category_url)和另一個詞(product_url)將被引導至該控制器/動作。

你會注意到,在我的例子中,我在類別和產品的單詞目錄之前。顯然你可以用你喜歡的任何東西來代替它,或者把它全部放在一起。我已經把它的原因,請考慮以下網址:

http://mywebsite.com/site/about 

如果你離開了URL的「目錄」部分,並定義了規則只爲:

<category_url:.+>/<product_url:.+> => product/view, 

的URL經理會將URL的網站部分看作category_url值,將大約部分看作product_url。爲了防止這種情況,你可以有網址的目錄protion,或定義的非目錄頁的規則(即,定義規則網站/約

規則解釋從上到下,只有第一規則匹配。很明顯,您可以根據需要爲儘可能多的不同網址結構添加儘可能多的規則。

我希望這可以讓你在正確的道路上,隨時與任何疑問或說明你需要