Всем привет.
Каждый, кто программирует на Symfony 2, сталкивался с ситуацией, когда надо переопределить какой-то файл стороннего бандла. Будь то Twig-шаблон, контроллер или файл с переводом.
Если бандл, который вы кастомизируете имеет хоть сколь-нибудь сложную систему вложенности файлов, то их переопределение становится не очень занимательной задачей.
Собственно, с целью автоматизации данной операции родился плагин для Sublime Text 3, которым я хочу поделиться с Symfony2-разработчиками.
Плагин умеет копировать текущий активный файл из бандла в папке vendors в выбранный бандл из папки src после нажатия Ctrl+Shift+O.
На данный момент поддерживается копирование шаблонов, переводов, php-файлов, любых файлов из папки Resources/public. Шаблоны и переводы могут быть скопированы как в бандл, так в соответствующее место директории app.
— на данный момент плагин может работать только с файлами из библиотек оформленных по стандарту PSR-0 и находящихся в папке vendor;
— тестировался только в Sublime Text 3 под Ubuntu;
—плагин еще не принят в PackageControl.io, потому придется ставить руками (инструкция есть) уже принят, можно устанавливать прямо из Sublime Text 3.
— Поддержка бандлов, оформленных по стандарту PSR-4;
— Рекурсивное переопределение папок;
—Автоматическая подстановка правильного namespace в скопированный файл уже реализовано;
— И другое.
Есть наболевшая (не только для меня, правда же?) проблема и я хочу поделиться ее решением, которое уже может кому-то пригодиться.
Спасибо за внимание.
Буду рад любому отклику — отзыв, совет, пул-реквест.
Ссылки
— Плагин на Package Control;
— Код плагина на github.com;
— TODO.md.
UPD:
С момента публикации этой статьи в песочнице, плагин был принят в packagecontrol.io, научился самостоятельно прописывать новый namespace в наследуемом php-файле и наследоваться от старого класса.
Каждый, кто программирует на Symfony 2, сталкивался с ситуацией, когда надо переопределить какой-то файл стороннего бандла. Будь то Twig-шаблон, контроллер или файл с переводом.
Если бандл, который вы кастомизируете имеет хоть сколь-нибудь сложную систему вложенности файлов, то их переопределение становится не очень занимательной задачей.
Например?
Показательным может быть e-commerce проект Sylius, в котором для переопределения, скажем, шаблона отображения продукта /vendor/sylius/sylius/src/Sylius/Bundle/WebBundle/Resources/views/Frontend/Product/show.html.twig придется создавать целую иерархию папок app/Resources/SyliusWebBundle/views/Frontend/Product вручную, чтобы в итоге положить туда файл show.html.twig.
Собственно, с целью автоматизации данной операции родился плагин для Sublime Text 3, которым я хочу поделиться с Symfony2-разработчиками.
Возможности
Плагин умеет копировать текущий активный файл из бандла в папке vendors в выбранный бандл из папки src после нажатия Ctrl+Shift+O.
На данный момент поддерживается копирование шаблонов, переводов, php-файлов, любых файлов из папки Resources/public. Шаблоны и переводы могут быть скопированы как в бандл, так в соответствующее место директории app.
Ограничения
— на данный момент плагин может работать только с файлами из библиотек оформленных по стандарту PSR-0 и находящихся в папке vendor;
— тестировался только в Sublime Text 3 под Ubuntu;
—
Планы
— Поддержка бандлов, оформленных по стандарту PSR-4;
— Рекурсивное переопределение папок;
—
— И другое.
Для чего я сделал публикацию на хабре?
Есть наболевшая (не только для меня, правда же?) проблема и я хочу поделиться ее решением, которое уже может кому-то пригодиться.
Спасибо за внимание.
Буду рад любому отклику — отзыв, совет, пул-реквест.
Ссылки
— Плагин на Package Control;
— Код плагина на github.com;
— TODO.md.
UPD:
С момента публикации этой статьи в песочнице, плагин был принят в packagecontrol.io, научился самостоятельно прописывать новый namespace в наследуемом php-файле и наследоваться от старого класса.
Комментарии (3)
fastpars
30.04.2015 16:44Пользуюсь гитом без гуя (с) =)
А по сути консольная команда должна выглядить так: app/console bundle:cp <from> <to>
hanovruslan
Было бы интересно узнать о ваших исследованиях, если такие были, есть ли какие-то консольные (php app/console %command%) выполняющие подобные операции. Согласитесь, что в командном исполнении подобный функционал почти что нативный для приложения на базе symfony?
igormukhin Автор
Исследований не было :)
Самая базовая и важная функция, с которой все началось — простое копирование файла из одного места (вендорного бандла) в другое (app/Resources или свой бандл в src). Представим что мы это проделываем в консоли. Нам придется как минимум:
1. Переключиться на консоль;
2. Перейти в папку проекта;
3. Ввести комманду;
4. Выбрать файл, который мы хотим переопределить (эта операция мне представляется самой трудозатратной);
5. Выбираем бандл, куда мы хотим переопределить файл;
6. Допустим, консольная команда знает каким редактором Вы пользуетесь и запускает файл в нем. Иначе — придется опять же копировать имя файла и открывать самому.
Итого 6 шагов против 2 (комбинация + выбор места назначения).
Вся суть — в автоматическом вычислении пути назначения при копировании не выходя из редактора.
Касательно нативности… Возможно, в процессе развития плагину будет необходим какой-то расширенный набор данных прямо с проекта, которые можно получить только после «компиляции» (чтобы прочитать только то, что может увидеть PHP, но не может увидеть Python, на котором написан плагин, как сторонний наблюдатель). Для такого случая в dev-окружении будет подключаться специальная библиотека, которая и будет выдавать нужные данные в определенном формате, а плагин будет эту команду запускать и считывать эти данные для своей работы.