Баг с namespaces в миграциях?

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Закрыто
De-Luxis
Сообщения: 27
Зарегистрирован: 2014.06.19, 11:16

Баг с namespaces в миграциях?

Сообщение De-Luxis » 2018.01.11, 15:20

Есть в миграциях возможность прописывать namespaces.
Так вот, есть у меня админка, которая ставится в vendor с помощью composer.
И namespace у него такого типа: yii\somename_panel
Соответственно в конфиге приложения прописываю:

Код: Выделить всё

return [
    'controllerMap' => [
        'migrate' => [
            'class' => 'yii\console\controllers\MigrateController',
            'migrationNamespaces' => [
                'app\migrations',
                'yii\somename_panel\migrations'
            ],
        ],
    ],
]
Когда Yii генерит полный путь до файлов, он зачем-то подставляет символ @ в начало строки, из-за чего namespace превращается в @yii\somename_panel\migrations
И соответственно применяет функцию замены альясов. Из-за чего путь превращается в
/home/.../basic/vendor/yiisoft/yii2/somename_panel/migrations/M180111120540BlaBla.php
Правильный путь должен быть:
/home/.../basic/vendor/somename/panel/migrations/M180111120540BlaBla.php
В composer.json модуля прописано:

Код: Выделить всё

    "autoload": {
        "psr-4": {
            "yii\\somename_panel\\": "/"
        }
    }
Разработчики фреймворка допустили ошибку тем, что самостоятельно добавляют символ @, тогда как это должны регулировать сами разработчики приложения в своих конфигах. ИМХО.

Проблему решил доавлением собственного альяса в bootstrap модуля:

Код: Выделить всё

		\Yii::setAlias( 'panel', '@vendor/somename/panel' );
В конфиге в итоге прописано:

Код: Выделить всё

return [
    'controllerMap' => [
        'migrate' => [
            'class' => 'yii\console\controllers\MigrateController',
            'migrationNamespaces' => [
                'app\migrations',
                'panel\migrations'
            ],
        ],
    ],
]
В итоге полная каша. namespace по факту yii\somename_panel, прописывается panel, и по конфигу не понятно, будет ли применяться альяс.
И пришлось подключать модуль в конфиг консоли, тогда как от него кроме альяса в bottstrap больше ни чего не надо.

С этим надо что-то делать. Либо я все делаю не правильно?

Прежде чем оформлять issue на github, подумал что лучше сначала спросить на форуме.
Последний раз редактировалось De-Luxis 2018.01.11, 15:56, всего редактировалось 1 раз.

Nex-Otaku
Сообщения: 774
Зарегистрирован: 2016.07.09, 21:07

Re: Баг с namespaces в миграциях?

Сообщение Nex-Otaku » 2018.01.11, 15:35

Неправильно сделал разработчик админки, когда поместил свой код в чужой namespace "yii".

zelenin
Сообщения: 10456
Зарегистрирован: 2013.04.20, 11:30

Re: Баг с namespaces в миграциях?

Сообщение zelenin » 2018.01.11, 15:38

Nex-Otaku писал(а):
2018.01.11, 15:35
Неправильно сделал разработчик админки, когда поместил свой код в чужой namespace "yii".
надо у кого-то разрешения спросить?

De-Luxis
Сообщения: 27
Зарегистрирован: 2014.06.19, 11:16

Re: Баг с namespaces в миграциях?

Сообщение De-Luxis » 2018.01.11, 15:44

Nex-Otaku писал(а):
2018.01.11, 15:35
Неправильно сделал разработчик админки, когда поместил свой код в чужой namespace "yii".
https://github.com/noumo/easyii
У этой древней админки так же. Сделал у себя по аналогии.
Разумеется в следующий раз буду делать somename/panel. С другой стороны yii как бы сразу говорит о том что не годится в качестве обособленного от фреймворка модуля.

De-Luxis
Сообщения: 27
Зарегистрирован: 2014.06.19, 11:16

Re: Баг с namespaces в миграциях?

Сообщение De-Luxis » 2018.01.11, 15:53

Еще я для удобства разработки панели модуль в vendor закинул как символьную ссылку на директорию с исходниками.
При создании миграции через команду "yii migrate/create 'panel\migrations\blabla'"
Создается класс, где namespace в коде ставится как panel\migrations;

Если его убрать или изменить, то разумеется получаю ошибку:
Exception 'yii\base\UnknownClassException' with message 'Unable to find 'panel\migrations\M000000000000BlaBla' in file: /home/.../basic/vendor/somename/panel/migrations/M000000000000BlaBla.php. Namespace missing?'


Всё смешалось в доме Облонских.

Nex-Otaku
Сообщения: 774
Зарегистрирован: 2016.07.09, 21:07

Re: Баг с namespaces в миграциях?

Сообщение Nex-Otaku » 2018.01.11, 16:20

надо у кого-то разрешения спросить?
Можно и со скалы прыгнуть без разрешения, но зачем?

Принято первым словом в namespace использовать что-то своё и уникальное, например, название собственного проекта, свой никнейм. Так называемый "vendor name".

Нарушаешь это правило - огребаешь проблемы. Да и просто некрасиво. Кто-то может решить, что это официальный компонент фреймворка.

zelenin
Сообщения: 10456
Зарегистрирован: 2013.04.20, 11:30

Re: Баг с namespaces в миграциях?

Сообщение zelenin » 2018.01.11, 16:27

Nex-Otaku писал(а):
2018.01.11, 16:20
надо у кого-то разрешения спросить?
Можно и со скалы прыгнуть без разрешения, но зачем?

Принято первым словом в namespace использовать что-то своё и уникальное, например, название собственного проекта, свой никнейм. Так называемый "vendor name".

Нарушаешь это правило - огребаешь проблемы. Да и просто некрасиво. Кто-то может решить, что это официальный компонент фреймворка.
официальный - yiisoft


De-Luxis
Сообщения: 27
Зарегистрирован: 2014.06.19, 11:16

Re: Баг с namespaces в миграциях?

Сообщение De-Luxis » 2018.01.11, 17:59

Ок. Буду переименовывать.

Закрыто