2015-02-10 68 views
1

我想爲我的模塊使用特定的文件夾名稱,但我並不想讓它的名稱顯示給最終用戶(即:在URL中)。我試圖設置類的名稱,但它告訴我,當它不是它應該是的東西時,它不存在。請注意:這個例子中的名字已經改變了,但是它得到了重點。Yii - 如何從模型目錄中使用不同的模型名稱?

在我的配置:

'modules'=>array(
    'cart' 
), 

在/保護/模塊我有一個文件夾ezcart。這是由Gii創建的模塊。我可以確認,當我用Gii創建「購物車」時,它可以按預期工作。

問題是,源明智我想文件夾的名稱ezcart保持不變。這是我的軟件包的名稱,我將把它放在GitHub上,並在將來分享和使用。因此,任何人在文件中知道什麼是什麼,就像我們保持相同的名稱,在「供應商」等

所以,如果我創建ezcart與GII,在我的config.php文件,我怎麼知道來的Yii使用不同的目錄名稱。例如,我想這樣做:

'modules'=>array(
    'cart'=>array(
     'class'=>'application.modules.ezcart' 
    ) 
), 

然而,它告訴我它無法找到ezcart。我怎樣才能讓Yii接受這個命名的區別?

+0

你需要在config.php的'urlManager'中設置規則 – 2015-02-10 06:54:39

回答

0

您應該使用URL路由這個.. 在你的config/main.php添加類似這樣的規則是這樣

... 
'components' => array(
    ... 
'urlManager'=>array(
    'rules'=>array(
     'mynewname/<controller>/<action>' =>'ezcart/<controller>/<action>' 
    ) 
) 
) 

指導的一些例子中看到的URL Management,什麼是所有可能使用的路由

+0

由於某些原因,它不起作用:'無法解析請求「mynewname」' – 2015-02-10 07:35:10

+1

這工作:''mynewname'=>'ezcart'' 。我無法使其與規則中的標籤一起使用。我的其他規則雖然工作正常。這有什麼不對嗎?我想我應該仍然能夠按照你說的方式讓它工作。如果它與其他事物相匹配,它會更具體,並且不會在將來造成問題。 – 2015-02-10 08:12:05

+0

嘗試使用它絕對即'/ mynewname//' – Manquer 2015-02-10 16:19:37

0

已解決!

看起來,當你嘗試在模塊的URL中使用不同的名稱時,Yii失去了它的大腦。我試圖通過$ defaultController和$ defaultAction,以及其他約10件事情。我無法弄清楚如何覆蓋我的模塊「ezpaypal」上設置的映射Yii,所以我可以將它的URL更改爲「billing」,但仍指向「/ modules/ezpaypal」。

首先,創建一個模塊。GII我將其命名「ezpaypal」轟,產生的一切

你的模塊名稱添加到config.php文件:。

'modules'=>array(
    'ezpaypal' 
), 

問題是,我不希望看到「ezpaypal」中的URL 。我希望它是可改變的,所以它可以是「/結算」或「/結帳」。所以我需要模塊保持命名爲「ezpaypal」。我嘗試並遵守規則,並遇到大量問題。

看來Yii爲「ezpaypal」創建了根別名,因爲它是我的加載模塊。如果你像正常一樣使用它,它的確可以正常工作。它知道要使用的控制器,一切。

當您使用urlManager規則將「billing」映射到「ezpaypal」以更改URL中的名稱時,Yii不再知道要使用哪個默認控制器。它也不知道要採取什麼默認操作,如/ controller/3,它不知道要執行/ controller/view/3。 Yii剛剛腦死亡。

更好的解決方案是,如果Yii確實有一個「隱藏」或不知名的方式來處理這個問題?我不知道Yii框架在哪裏解析配置並加載模塊。也許我可以找到一個函數或變量來設置,這將解決這個問題,沒有冗長的url管理器規則。它正確處理了「ezpaypal」模塊URL規則,而無需任何雖然添加到urlmanager ...

一個簡單的修正,是寫你的網址經理規則來處理每一個可能的組合。也許有人可以把它清理成更少的線條?

'rules'=>array(
      // EZPayPal Friendly URL Support - DO NOT TOUCH! 
      '<module:(billing)>'=>'ezpaypal', 
      '<module:(billing)>/index'=>'ezpaypal/default/index', 
      '<module:(billing)>/<controller:\w+>'=>'ezpaypal/<controller>', 
      '<module:(billing)>/<controller:\w+>/<id:\d+>'=>'ezpaypal/<controller>/view', 
      '<module:(billing)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'ezpaypal/<controller>/<action>', 
      '<module:(billing)>/<controller:\w+>/<action:\w+>'=>'ezpaypal/<controller>/<action>', 
), 

工程:)

如果有人做同樣的事情,使用您的模塊不同的URL路徑,只是改變「結算」與你在URL名稱,「ezpaypal 「用模塊目錄的實際名稱。

PS:上述規則可以簡化嗎?我不確定。看來這是完美的組合。如果我刪除一條,那條路線就會中斷。另外,我還在尋找一種更簡單的方式,所以我們可以在沒有urlmanager的情況下覆蓋它。

相關問題