創建模塊「論壇」 - 完全如寫here。然後創建嵌套模塊「管理員」:
//"Module.php" in '@app/modules/forum'
namespace app\modules\forum;
class Module extends \yii\base\Module {
public function init() {
parent::init();
\Yii::configure($this, require(__DIR__ . '/config.php'));
$this->modules = [
'admin' => [
// here is my nested module
'class' => 'app\modules\forum\modules\admin\Module',
],
];
}
}
還創建了一個非嵌套模塊「遊戲」(以同樣的方式),並在「web.php」(主配置文件中寫道: ):
'modules' => [
'forum' => [
'class' => 'app\modules\forum\Module',
],
'games' => [
'class' => 'app\modules\games\Module',
],
'admin' => [
'class' => 'app\modules\forum\modules\admin\Module',
],
],
但是,當我試圖輸出:
// codeline is written in application view, not in module view
var_dump(array_keys(\Yii::$app->loadedModules));
我看到只有這些模塊:
array(4) {
string(19) "yii\web\Application"
string(16) "yii\debug\Module"
string(14) "yii\gii\Module"
string(24) "app\modules\forum\Module"
}
「遊戲」和嵌套「管理員」模塊是不存在的!雖然doc說:
$ loadedModules財產不斷加載的模塊列表,包括直接兒童和嵌套那些,通過他們的類名索引。
但我只能得到「論壇」自己創建的模塊。我是什麼理解錯誤?
謝謝!我注意到,'$ loadedModules'將包含**不完全只有在'$ bootstrap'配置屬性中設置的**模塊。如果你注意到了,在'contact'頁面中,我也看到了_app \ modules \ forum \ Module_,它不在引導程序中。這是因爲爲了實驗的目的,我在'contact'視圖中調用了'\ Yii :: $ app-> getModule('forum');'因此我通過getModule()方法加載了**一個模塊 - 'forum' 。我添加了'\ Yii :: $ app-> getModule('forum') - > getModule('admin');' - 'admin'模塊現在也存在於'$ loadedModules'!與「遊戲」模塊相同的情況。 Yii2初學者的意外行爲) –
是的,當你調用'\ Yii :: $ app-> getModule();'該模塊將出現在'$ loadedModules'中 – Tony