Созданный модуль «Форум» — именно так, как написано Вот. Затем создал вложенный модуль «Админы»:
//"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"
}
«Игры» и вложенный «Админы» модули отсутствуют! Хотя доктор говорит:
свойство $loadedModules хранит список загруженных модулей, включая прямых и вложенных детей, индексируется по именам классов.
Но я мог получить только «Форум» сам созданный модуль. Что я не так понимаю?
Как сказано в документации:
Свойство $loadedModules хранит список загруженных модулей
Это означает, что он сохраняет модули, загруженные в текущий запрос. Например. если вы находитесь на странице модуля example.com/forum/
это будет содержать app\modules\forum\Module
но если вы на example.com/site
где сайт это имя контроллера $loadedModules
будет содержать только модули, которые установлены в $bootstrap
свойство config.
Чтобы получить список всех модулей, позвоните Yii::$app->modules
, Обратите внимание, что $loadedModules
содержит само приложение, так как оно расширяется Module
учебный класс. Yii::$app->modules
содержит все модули из конфигурации приложения modules
имущество.
Других решений пока нет …