2013-12-10 98 views
0

當我不喜歡描述here我只是配置獲得的config/main.php步驟:如何加載Yii模塊組件?

<?php 
return array(
    'modules' => array(
    'tracking' => array(
     'components' => array(
     'tracking' => array(
      'foo' => 'bar' 
))))); 

這個結果,當我的var_dump Yii::app()->getModule('tracking')

object(TrackingModule)#148 (20) { 
    ["defaultController"]=> string(7) "default" 
    ["layout"]=> NULL 
    ["controllerNamespace"]=> NULL 
    ["controllerMap"]=> array(0) {} 
    ["_controllerPath":"CWebModule":private]=> NULL 
    ["_viewPath":"CWebModule":private]=> NULL 
    ["_layoutPath":"CWebModule":private]=> NULL 
    ["preload"]=> array(0) {} 
    ["behaviors"]=> array(0) {} 
    ["_id":"CModule":private]=> string(8) "tracking" 
    ["_parentModule":"CModule":private]=> NULL 
    ["_basePath":"CModule":private]=> string(79) "..." 
    ["_modulePath":"CModule":private]=> NULL 
    ["_params":"CModule":private]=> NULL 
    ["_modules":"CModule":private]=> array(0) {} 
    ["_moduleConfig":"CModule":private]=> array(0) {} 
    ["_components":"CModule":private]=> array(0) {} 
    ["_componentConfig":"CModule":private]=> array(1) { 
    ["tracking"]=> array(1) { 
     ["foo"]=> string(4) "bar" 
    } 
    } 
    ["_e":"CComponent":private]=> NULL 
    ["_m":"CComponent":private]=> NULL 
} 

我希望我可以訪問模塊組件通過Yii::app()->getModule('tracking')->tracking。但正如你所看到的Yii::app()->getModule('tracking')沒有組件,只是它的配置。

任何建議我做錯了什麼?

回答

3

你必須配置指定組件類,例如(TrackingClassName):

'modules' => array(
    'tracking' => array(
     'foo' => 'bar', 
     'components' => array(
      'tracking' => array(
       'class' => 'TrackingClassName', 
      ),... 
+0

這對我有用。但爲什麼我要聲明組件類名稱?因爲當我經由GII產生的模塊有一個在模塊的初始函數的行:'$這 - > setImport(陣列( \t \t \t 'tracking.models *', \t \t \t 'tracking.components *', \t \t));'。 – Jurik

+0

setImport就像PHP的include_once,但所有的文件,例如。在tracking/components/*。php中。在第一次使用時,在config中設置類名意味着'新類'。你必須這樣做。它的邏輯是因爲Yii如何從組件中知道哪些類?類名稱可以在模塊內部設置,但是隻有當類名稱動態變化時,IMO纔會更好。 – RobM

0

您仍然可以通過Yii::app()->getModule('tracking')->tracking訪問它。組件將在第一次使用之前創建。

+0

當我做到這一點('的Yii ::應用程序() - > getModule('tracking') - > tracking')調用我只是在非'對象'錯誤的情況下調用php'。 – Jurik