Модулите в Yii2

composer | yii2 | миграция

Модулите в Yii2

Въведение

Преди известно време писах за оправянето на конфликти в git. Тогава mobiew написа един коментар, в който разкритикува метода ми на работа. Аз също знаех, че това не е най-добрият подход, но и не знаех по-добър. Все пак се зачетох и много бързо осъзнах, че мога да разделя логиката си на различни модули, които да включвам в проектите чрез Composer.

Composer

Каква е идеята? Както вероятно знаете, Composer е инструмент, който ни позволява да организираме кода си на пакети, както и да изтегляме чужди, публично достъпни пакети, като по този начин преизползването на функционалност става изключително лесно. Общо взето, идеята е да създадете пакети, с модулите, които искате да преизползвате и да ги запазите, в (частни) git хранилища. Запазените пакети могат да включени, като зависимости на проекта или други пакети.

Yii модулите

Работата с модули е подробно описана в документация на рамката. В документацията, обаче е описана работата с базовия шаблон за приложения. При използване на по-сложния обаче, получаваме две под-приложения. Едното е публичната част на сайта, а другото, административната. Все пак се оказва, че за Yii не е проблем да разделите модула си на поддиректории/подмодули за двете части на сайта си. Просто създаваме директории за различните части на сайта и работим с тях, като с отделни модули.

Проблемът

Проблемът на тази реализация се оказва базата от данни. Да си представим, че имаме модул “Блог”. Блогът, изисква таблици за публикации, категории, коментари и прочие. Изискването да се създадат необходимите таблици преди инсталацията на модула е доста глупаво. Все пак ние искаме просто да го изтеглим и да го използваме. Да не говорим, че при обновление на модулът, може да се наложи да правим промени по базата от данни.

Добрата новина, е че Yii има механизъм за миграции на промените. Лошата новина, е че трябва да промените на всички модули и подмодули и да изпълняваме миграциите на ръка.

Решението

Няколко месеца след като се досетих, че мога да ползвам Yii модули публикувах, Composer пакет, който автоматично намира и изпълнява миграции, намиращи се в пакета.

Инсталация

В основната директория на проекта си изпълнете следната команда:

1
php composer.phar require --prefer-dist ivanovyordan/yii2-migration "*"

или добавете следната зависимост в composer.json файла си:

1
"ivanovyordan/yii2-migration": "*"

Настройка

В composer.json файла добавете следния елемент:

1
2
3
4
"scripts": {
"post-install-cmd": "ivanovyordan\\migration\\Migration::migrate",
"post-update-cmd": "ivanovyordan\\migration\\Migration::migrate"
}

Исизквания

Пакетът изисква да всички миграции за модулите Ви да се намират в директория, наречена migrations, която да се намира в основата на модула.

Заключение

Yii 2 е изключително удобна рамка. Подръжката на модули и работата с Composer правят преизползването на компоненти изключително лесна и приятна задача. Силно го препоръчвам.