Aliases, namespace, доработка чужого модуля

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
fedornabilkin
Сообщения: 17
Зарегистрирован: 2017.09.23, 15:17

Aliases, namespace, доработка чужого модуля

Сообщение fedornabilkin »

Здравствуйте. Подскажите, пожалуйста, как правильно настроить конфиг, чтобы можно было вносить изменения в чужой модуль?

Если установить модуль через композер, то в vendor нам делать нечего. Поэтому нужна своя копия модуля. Правильно ли я понимаю алгоритм действий?

1. Делаю форк репозитория.
2. Клонирую модуль во frontend/modules/forkmodule
3. В конфиге, в секции aliases указываю фактический путь к файлу модуля
4. При необходимости могу переключать в конфиге модуль со "своего" на вендорный и обратно.

В конечном итоге получаю следующее:
1. Файл модуля лежит во frontend/modules/podium/src

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

<?php

namespace bizley\podium;
2. В конфиге указываю алиас и модуль

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

    'aliases' => [
        '@bizley\podium' => '@frontend/modules/podium/src',
    ],
    ...
    'modules' => [
        ...
        'podium' => [
            'class' => 'bizley\podium\Podium',
            ....
    


Но при загрузке выдает ошибку Class bizley\podium\Podium does not exist
Я что-то упустил или делаю совершенно не так?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Aliases, namespace, доработка чужого модуля

Сообщение urichalex »

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

Yii::$classMap['bizley\podium\Podium'] = '@frontend/modules/podium/src/Podium.php';
fedornabilkin
Сообщения: 17
Зарегистрирован: 2017.09.23, 15:17

Re: Aliases, namespace, доработка чужого модуля

Сообщение fedornabilkin »

Этот вариант не подойдет, потому что таким образом я переопределяю путь только к одному классу. А надо переопределить путь, основанный на namespace, для автозагрузчика.
Если у нас namespace bizley\podium; , то класс загружать из @frontend/modules/podium/src/
Если namespace bizley\podium\controllers; , то загружать из @frontend/modules/podium/src/controllers

Вроде бы так логично, но через алиасы почему-то не работает.
fedornabilkin
Сообщения: 17
Зарегистрирован: 2017.09.23, 15:17

Re: Aliases, namespace, доработка чужого модуля

Сообщение fedornabilkin »

Насколько я понял это надо прописывать в composer.json в директории модуля и это правило будет использовано при установке модуля через композер.

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

"autoload": {
        "psr-4": {
            "bizley\\podium\\": "src/"
        }
    }
В моем случае модуль не устанавливается через композер. Я клонирую все файлы сразу в директорию. Или я чего-то не понимаю?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Aliases, namespace, доработка чужого модуля

Сообщение zelenin »

это директива для автолоадинга неймспейса из заданной директории
fedornabilkin
Сообщения: 17
Зарегистрирован: 2017.09.23, 15:17

Re: Aliases, namespace, доработка чужого модуля

Сообщение fedornabilkin »

Тогда я совсем запутался. Куда мне эту директиву прописать в моем случае? В composer.json, что в корне проекта пробовал прописать. В composer.json, что в директории модуля, он там и так прописан самим автором.
Похоже я упустил какой-то момент. zelenin, если не сложно, объясни, пожалуйста, на пальцах, как происходит автозагрузка классов.

Файлы модуля лежат во frontend/modules/podium/src/
Неймспэйсы у классов namespace bizley\podium; и далее по структуре bizley\podium\controllers bizley\podium\model

В конфиге в алиасах прописал

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

'aliases' => [
        '@bizley\podium' => '@frontend/modules/podium',
    ],
Где я чего не добавил или что я сделал не так?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Aliases, namespace, доработка чужого модуля

Сообщение zelenin »

в composer.json своего проекта (в корне) пропиши

"autoload": {
"psr-4": {
"bizley\\podium\\": "frontend/modules/podium/src/"
}
}

дальше запусти composer install, у тебя перегенерится автолоадер композера, лежащий в vendor/composer и yii узнает из какой диры брать твой нееймспейс. Старое расширение удали из композера.
fedornabilkin
Сообщения: 17
Зарегистрирован: 2017.09.23, 15:17

Re: Aliases, namespace, доработка чужого модуля

Сообщение fedornabilkin »

Вот спасибо огромное, сразу все прояснилось. Единственное, что не понял, почему AssetBundle он ищет по старому пути?
В layout/main.php регистрируются стили PodiumAsset::register($this); и это вызывает ошибку
The file or directory to be published does not exist: /var/www/ff.dev/vendor/bizley/podium/src/css

Если закомментировать, то модуль загружается без ошибок.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Aliases, namespace, доработка чужого модуля

Сообщение Nex-Otaku »

Все кеши сбрось.
fedornabilkin
Сообщения: 17
Зарегистрирован: 2017.09.23, 15:17

Re: Aliases, namespace, доработка чужого модуля

Сообщение fedornabilkin »

Разобрался. В файле модуля было напрямую прописано $this->setAliases(['@podium' => '@vendor/bizley/podium/src']);
Вот так более правильно будет $this->setAliases(['@podium' => dirname(__DIR__) . '/src']);
Ответить