Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Подсказки в PhpStorm для Doctrine Entity Manager с Zend Framework

Доброго времени суток! У меня появилась небольшая проблема во время программирования контроллера в Zend Framework 2, моя среда разработки никак не хотела давать подсказок по любым объектам, связанным со встроенной ORM Doctrine.

Описание проблемы автодополнения

Я пользуюсь IDE под названием IntelliJ IDEA от прекрасной фирмы JetBrains с установленным плагином на PHP, который называется PhpStorm. Но поверьте мне, дело совсем не в ней, любая среда бы не смогла разресолвить методы встроенной в Zend Framework доктрины.

Но ближе к делу.

Idea любезно отвечает «No suggestions», мол «сори, не знаю такого», на просьбу показать методы объекта класса EntityManager, я даже сделал скриншот.

PhpStrorm No suggestions by Zend Framework 2

Танцы с бубном вокруг настроек «Include Path» не увенчались успехом, пришлось идти бороздить просторы англоязычного интернета. Решение нашлось не сразу.

Оно заключается в том, чтобы явно указать тип переменной, которая является объектом доктриновского EntityManagerа. Сделать это можно с помощью PHP аннотации @var. Пару слов о ней.

Аннотация @var в PHP

@var - это специальная аннотация phpDoc, которая служит для уточнения типа и описания любой переменной, очень рекомендуется ее использовать и грамотно документировать переменные. Особенно, если вы пишете библиотеку, которую будут использовать другие программисты, они обязательно скажут вам "спасибо".

Пример использования

Примеры демонстрируют, как можно задокументировать тип переменной и поделиться ее базовым описанием. Это очень упрощает жизнь и разработчиком самой библиотеки.

Важное замечание! Синтаксис нужно соблюдать безукоризненно, начинаться аннотация должна с /** и заканчиваться */, при этом возможен вариант написания в одну строку.

Решение проблемы автодополнения в PhpStorm

Как раз таким образом мы и поборем слепоту PhpStormа, а именно напрямую укажем ему тип переменной, в которой будет находиться объект класса EntityManager.

Например, в моем случае каждый контроллер наследуется от CustomController, который имеет protected поле $em, и метод getEntityManager. Это удобно, не нужно копировать код получения менеджера во все контроллеры. Для того, чтобы IDE понимал, какого типа $em и показывал подсказки по методам EntityManager, достаточно прописать такую аннотацию.

Все получилось, PhpStorm перестал капризничать и подсказывает нам методы менеджера сущностей доктрины.

Автодополнение в PhpStorm

Заключение

Небольшая неприятность с автодополнением решена. А вообще phpDocumentator это классный проект, документировать программы круто, вот официальный сайт, там можно подробнее познакомиться с phpDoc. А у меня на сегодня все, спасибо за внимание!