2011-12-24 75 views
2

我在webroot中創建了一個Yii應用程序。我啓用了Gii模塊並修改了.htaccess以刪除url中的index.php部分。我也有配置文件中定義的urlManager組件。Yii框架中定義的Gii路由在哪裏?

'urlManager' => array(
    'showScriptName' => FALSE, 
    'urlFormat' => 'path', 
    'rules' => array(
     '<controller:\w+>/<id:\d+>' => '<controller>/view', 
     '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
     '<controller:\w+>/<action:\w+>' => '<controller>/<action>' 
     ) 
) 

當我在瀏覽器中輸入http://www.mydomain.com/gii,我重定向到http://www.mydomain.com/gii/default/login

顯然,urlManager中沒有匹配的網址rules。這是否意味着當Yii找不到任何匹配的url規則時,它會開始尋找匹配的模塊?

+0

¿問題是什麼?...有問題嗎?重定向到http://www.mydomain.com/gii/default/login對你來說意外?你有什麼期望? – 2011-12-25 02:36:44

+0

@AlfredoCastañedaGarcía問題是,'gii'是模塊名稱,'default'是控制器名稱,'login'是動作。即使我沒有一個匹配它的規則模式,gii/default/login仍然有效,這是我感到奇怪的地方。 – bobo 2011-12-28 04:47:54

回答

3

BOBO,是的,它看起來像Yii的開始尋找通過選配模塊:

yii/framework/gii/GiiModule.php, Line 43 
* http://localhost/path/to/index.php?r=gii 
* 
* If your application is using path-format URLs with some customized URL rules, you may need to add 
* the following URLs in your application configuration in order to access GiiModule: 
* <pre> 
* 'components'=>array(
*  'urlManager'=>array(
*   'urlFormat'=>'path', 
*   'rules'=>array(
*    'gii'=>'gii', 
*    'gii/<controller:\w+>'=>'gii/<controller>', 
*    'gii/<controller:\w+>/<action:\w+>'=>'gii/<controller>/<action>', 
*    ...other rules... 
*  ), 
* ) 
*) 
* </pre> 

看起來它與正常的規則開始,然後移動到想要額外的模塊(和它們的控制器/動作)之後。似乎將模塊ID(本例中爲gii)作爲第一部分。

在進一步的研究中,是的,情況就是這樣。有關更多信息,請參閱Yii Module page

+0

似乎你是對的。非常感謝。 – bobo 2011-12-28 16:11:55

+0

當然,很高興提供幫助。在我看到你的問題之前,沒有真正想過它是如何工作的:-) – acorncom 2011-12-29 00:18:16

0

你的意思是? Gii是一個模塊,URL是正確的,你有默認的,因爲CWebModule中的defaultController屬性是'默認',你可以擴展Gii並自定義它,如果你想。