cr1gger
@cr1gger
Все дороги ведут в Рим — встретимся в Риме!

Ошибка в консольных контроллерах, namespace из алиаса?

Привет, смотрите я создал новый модуль в проекте:
common/modules/supermodule/Module.php
Ну и сопутствующие для него файлы (commands, config и т.д)
Сам модуль выглядит примерно так:
Module.php

<?php

namespace Company\Modules\Operations;

use Yii;
use yii\base\BootstrapInterface;
use yii\console\Application as ConsoleApplication;

class Module extends \yii\base\Module implements BootstrapInterface
{
    /**
     * {@inheritdoc}
     */
    public $controllerNamespace = 'Company\Modules\Operations\commands';

    /**
     * {@inheritdoc}
     */
    public function init()
    {
        parent::init();

        Yii::configure($this, require __DIR__ . '/config/config.php');
    }

    /**
     * {@inheritdoc}
     */
    public function bootstrap($app)
    {
        if ($app instanceof ConsoleApplication) {
            $this->controllerNamespace = 'Company\Modules\Operations\commands';
        } else {
            $this->controllerNamespace = 'Company\Modules\Operations\controllers';
        }
    }
}



Потом я добавил в него common/modules/supermodule/composer.json
Где прописал namespace:
"autoload": {
    "psr-4": {
      "Company\\Modules\\Operations\\": ""
    }
  }


Далее создаю в common/modules/supermodule/commands новый файл TestController.php
Содержимое простое:

<?php

namespace Company\Modules\Operations\commands;

use yii\helpers\Console;

class TestController extends \yii\console\Controller
{

    public function actionIndex()
    {
        Console::output('Hello world!');
    }
}


Теперь этот модуль я выношу в отдельный репозиторий и подключаю его как git submodule
А в основном composer.json указываю namespace где искать его.
Основной composer проекта
"autoload": {
    "psr-4": {
      "Company\\Modules\\Operations\\": "common/modules/Operations/"
    }
  },


.gitmodules

[submodule "common/modules/Operations"]
	path = common/modules/Operations
	url = ssh://git@gitlab...../module-operations.git



Если запустить выполнение этой команды то все окей все работает я получаю Hello World!: php yii operation/test

Ошибка появляется когда вводишь php yii или php yii help чтобы посмотреть описание команд которые есть.

Сама ошибка вот:
Стек ошибки

Exception 'yii\base\InvalidArgumentException' with message 'Invalid path alias: @Company/Modules/Operations/commands'

in /app/vendor/yiisoft/yii2/BaseYii.php:154

Stack trace:
#0 /app/vendor/yiisoft/yii2/base/Module.php(257): yii\BaseYii::getAlias('@Company/M...')
#1 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(245): yii\base\Module->getControllerPath()
#2 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(240): yii\console\controllers\HelpController->getModuleCommands(Object(Company\Modules\Operations\Module))
#3 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(172): yii\console\controllers\HelpController->getModuleCommands(Object(yii\console\Application))
#4 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(192): yii\console\controllers\HelpController->getCommands()
#5 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(292): yii\console\controllers\HelpController->getCommandDescriptions()
#6 /app/vendor/yiisoft/yii2/console/controllers/HelpController.php(67): yii\console\controllers\HelpController->getDefaultHelp()
#7 [internal function]: yii\console\controllers\HelpController->actionIndex(NULL)
#8 /app/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#9 /app/vendor/yiisoft/yii2/base/Controller.php(180): yii\base\InlineAction->runWithParams(Array)
#10 /app/vendor/yiisoft/yii2/console/Controller.php(181): yii\base\Controller->runAction('', Array)
#11 /app/vendor/yiisoft/yii2/base/Module.php(528): yii\console\Controller->runAction('', Array)
#12 /app/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('', Array)
#13 /app/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('', Array)
#14 /app/vendor/yiisoft/yii2/base/Application.php(386): yii\console\Application->handleRequest(Object(yii\console\Request))
#15 /app/console/yii(28): yii\base\Application->run()
#16 {main}



Exception 'yii\base\InvalidArgumentException' with message 'Invalid path alias: @Company/Modules/Operations/commands'

Почему он из namespace пытается сделать алиас ?
И как это поправить ?
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
Почему он из namespace пытается сделать алиас

потому что так модули yii2 и работают с композером, перед написанием модулей стоит освоить базовый мануал по алиасам - https://www.yiiframework.com/doc/guide/2.0/ru/conc...
тебе нужно переопределить этот алиас
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы