tigroid3
@tigroid3
PHP, YII2, SQL, Postgres, Docker, SPHINX, GIT

Как правильно вносить изменения в компонентах YII2?

Есть компонент по типу gridview.
Весь js находится в vendor/component/panel
Появилась необходимость повесить несколько событий. Я поправил прямо в vendor.
Тимлид говорит что нужно делать отдельные js, и вешать на trigger события чтобы все не редактировали этот js в vendor.
Хотелось бы узнать, куда выносить этот отдельный js и где его инклудить?
  • Вопрос задан
  • 502 просмотра
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если надо расширить функции gridview, то надо написать свой класс, унаследовать его от gridview, так через assets подключить необходимый js и т.д.
Тогда при обновлении yii через composer не будет проблем.
Ответ написан
Insolita
@Insolita
Отчаянная домохозяйка
Есть компонент по типу gridview.
Весь js находится в vendor/component/panel

полагаю из этого следует что компонент - не есть yii-шный gridView а аналог
свой js приложения можно хранить либо в корневой папке проекта
Для подключения создаётся AssetBundle - наследник от соответствующего класса yii где и прописывается путь, затем бандл регистрируется в лейауте или конкретных вьюхах. www.yiiframework.com/doc-2.0/guide-structure-asset... и указанные в настройках бандла файлы будут скопированы/слинкованы в общую папку assets

Можно сразу хранить в папке доступной из веба web/js/lib например, и тогда можно скрипт подключить во вьюхе методом registerJsFile но как правило ассетбандлы гибче

Хотя если компонент грида используется как виджет то возможно в нем уже предусмотрена адаптация для событий поддерживаемых компонентом, и если js-кода не очень много, то можно прямо в вьюхе написать типа
SomeGridWidget::widget([
    'prop1'=>'val1',
    'prop2'=>'val2',
    'clientOptions'=>[
           'onSomeEventCallback'=>new JsExpression('
                          function(callback_arguments){do_custom_behaviors();}
           '),
    ]
]);

если кода очень немного можно прямо строкой и оставить.
если много - вынести js-функции в отдельный js-файл а из виджета только функции вызывать.
так же если очень часто используется с модификацией - можно отнаследовать виджет с уже предзабитыми параметрами по дефолту, и при необходимости дополненную доп.аттрибутами, чтобы не таскать по формам большую конфигурацию.
Но тимлид однозначно прав - править файлы в вендоре не нужно. Либо наследовать (если ООП), либо на собтия предусмотренные вешаться, либо делать полностью форк с правками. Иначе после обновления пакетным менеджером будет ругаться на изменения постоянно ну и папку вендор в гит обычно не включают, при деплое зависимости подкачиваются пакетным менеджером уже на сервер согласно composer.lock
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
Если изменения (Utils/Helpers и т.п.) один раз понадобились, то и еще понадобятся, в том числе в других проектах, так что если понимать, как все работает, то "форк" фреймворка - это не плохо, а хорошо, а тимлидер не прав, но раз такой тимлидер, то делайте прямо в app, то есть вне фреймворка.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы