Блог веб-разработчика v 1.0.0
Symfony2, AngularJS, React, Gulp, PhpStorm и много других страшных слов

Работа с Symfony2 в PhpStorm

2 года назад
8509 просмотров
PHP Frameworks PhpStorm Symfony2

PhpStorm отличная IDE. Но даже с отличным инструментом работа превращается в это, если неправильно им пользоваться.

Это касается и работы с Symfony2 проектами. PhpStorm обеспечивает неплохую поддержку этого фреймворка из коробки, но нужно больше золота. Что же мы получим в итоге:

  • Сервисы
    • Автокомплит по именам сервисам в методе get() контейнера, в yml, xml и вообще везде, где вы будете указывать сервисы.
    • В том числе авто-определение класса объекта сервиса со всеми последствиями (подсказки по методам и пр.)
    • Переход к классу сервиса из любого его вызова по Ctrl+клик.
    • Индексация сервисов "на лету" без необходимости перекомпиляции контейнера. Не всегда все индексирует.
  • Роутинг
    • Автокомплит роутов везде где только можно.
    • Переход к экшену по Ctrl+клик на имя роута.
    • Фолдинг роутов в реальный URL.
    • Автокомплит параметров роута.
    • Переход в один клик от экшена контроллера к шаблону. Или, если шаблона нет, возможность его создать. На полях слева от имени экшена.
  • Формы
    • Автокомплит параметров для настройки форм (которые задаются обычным массивом).
    • Автокомплит типов полей. В том числе в самописных аннотациях, например, к сущностям.
  • Doctrine
    • Автокомплит в аннотациях сущностей.
    • Автокомплит названий сущностей.
    • Определение классов репозиториев с последующим автокомплитом методов.
    • Поддержка QueryBuilder и Query. Мне не особо понравилось, многие методы не видит.
  • Twig
    • Подсказки по любым Twig функциям, модификаторам и переменным (в том числе глобальным), в том числе из ваших собственных расширений.
    • Возможность перейти к определению Twig-финкции, модификатора, переменной по Ctrl+клик.
    • Автокомплит имен наследуемых через {% extends %} блоков.
    • Автокомплит и фолдинг имен шаблонов.
    • Подсказки по translate'ам, их фолдинг в текст. Переход по Ctrl+клик к определению.
    • Подсказки по ассетам, их анализ на валидность. В том числе ассеты из конфигов через AssetManager.
    • Подсказки по макросам.
  • Новые вкладки IDE
    • Полная структура проекта с разбиением на контроллеры, шаблоны и прочее. Вкладка Framework.
    • Быстрый поиск по ресурсам Symfony2. Вкладка Symfony2.
  • Аннотации
    • Автокомплит любых сторонних аннотаций и их параметров.
  • Удобная интеграция с PHPUnit и запуск тестов прямо в IDE
  • Наверняка еще что-то есть, а я просто забыл.

Установка

Нам понадобятся всего три плагина:

Поэтому первым делом нужно все это установить. Открываем настройки (Ctrl + Alt + S), раздел Plugins. И жмем среднюю кнопку под списком: Browse repositories... В появившемся окне находим вышеуказанные плагины и устанавливаем их в таком же порядке, как выше, т.к. они зависимые. Теперь жмем OK и перезапускаем PhpStorm. Теперь в списке плагинов у вас должно быть примерно такое:

Настройка проекта

Далее нам понадобится проект на Symfony2. Создаем новый проект из готовых файлов, или открываем свой, а можно создать проект через FTP. В общем, нужен проект.

Скорее всего, PhpStorm сейчас сам определит, что проект на Symfony2 и предложит включить интеграцию. Можно смело с ним соглашаться, однако автоматически настроится далеко не все.

Заходим снова в настройки (Ctrl + Alt + S), в раздел PHP -> Framework Integration. Ставим галочку Enable framework integration и выбираем в списке Symfony2. Далее вручную проставляем роли папок проекта. Чтобы указать папке роль нужно мышкой щелкнуть на вторую колонку, появится выпадающий список. Если вы работаете с Symfony2, то интуитивно догадаетесь что куда, но на всякий случай привожу скриншот:

Теперь идем в раздел настроек Symfony2 Plugin. Ставим галочку Enable plugin for this project. И перезапускаем PhpStorm. На этом настройка проекта закончена, пробуйте.

Конечно все эти плагины имеют еще кучу настроек, в которых копайтесь уже самостоятельно. В 99% случаев менять там ничего не придется.

Внимание. Для корректной работы половины указанных фишек требуется наличие некоторых файлов из кеша:

  • Нужен файл app/cache/dev/appDevUrlGenerator.php, иначе будут проблемы с подсказками по роутам.
  • Нужна папка app/cache/dev/translations, иначе плагин не будет видить translation'ы.
  • Нужен файл app/cache/dev/appDevDebugProjectContainer.xml, иначе не будет подскозок по сервисам или они будут хромать.

В общем, в идеале нужно работать на локальном сервере. Но можно прекратно обходиться FTP, как это делаю я, просто скачав нужные файлы из кеша.

Так же советую прочитать статью о продуктивной работе в PhpStorm, т.к. о многих функциях просто так не догадаться.

Update от 07.10.2015

В более новых версиях PHP Storm вкладка Framework Intergration может отсутствовать. Если у вас именно так, то следует вручную установить плагин Framework MVC Structure Support из репозитория и вкладка появится. Framework Intergration появится в разделе Other Settings.

Что еще почитать
Авторизация в тестах PHPUnit в Symfony2
2 года назад
2556 просмотров
Рано или поздно вам понадобится иммитировать авторизованного пользователя в PHPUnit тестах. Советы из документации полезны, но не совсем удобны.