Быстрее, лучше и более эффективный тип намека на PHP Storm с локаторами сервисов

Я искал способ сделать это в течение нескольких месяцев. Я один из тех разработчиков, которые любят автозаполнение. Для каждого вызова Service Locator в zend framework 2 я набираю подсказку со следующим:

Без глобального файла подсказки

/** @var \Module\Service\SuperService $superService */ $superService => $this->getServiceLocator()>get('\Module\Service\SuperService'); $superService->coolFunction(); 

Это работает, но код может стать беспорядочным, когда вы начинаете получать 2-4 Services в одном контроллере. Я пытаюсь найти лучший способ использовать PHP Storm и набирать намеки на вызовы локатора сервисов

Solutions Collecting From Web of "Быстрее, лучше и более эффективный тип намека на PHP Storm с локаторами сервисов"

Хотя это не поможет вам сейчас, вам полезно знать, что мы близки к поддержке этого из коробки, с несколькими оговорками:

  1. Контейнеру необходимо реализовать Container\Interop\ContainerInterface проекта Container\Interop\ContainerInterface который уже делает ServiceManager ZF2.

  2. Вам нужно использовать суперкомпьютер super-global-hyper-magic-cont ::class чтобы назвать и получить ваши классы. В вашем случае просто замените строку в вызове get с Module\Service\SuperService::class (доступный с PHP 5.4 и выше).

Я ожидаю, что эта функциональность будет доступна в следующем выпуске PhpStorm 2016.2, который должен появиться в течение лета.

Gary

Примерно месяц назад PHP Storm выпустила новую функцию, которая позволяет использовать статический файл для ввода типа. Я лично использую это только для локатора сервисов, но его можно использовать для многих других вещей, которые PHP Storm не может выполнить, потому что это не волшебство.

С глобальным файлом hinting

 $superService = $this->getServiceLocator()->get('\Module\Service\SuperService'); $superService->coolFunction(); 

Это делает несколько вещей для нас как разработчиков:

  • Командная работа (другие смогут сразу увидеть все службы со всех модулей)
  • кодирование
  • скорость
  • Четкость кода
  • Стандарты кода
  • Нажмите, чтобы перейти к классу быстрее

Что делать

В проекте ROOT (то же самое место, что и composer.json ), должен (create if not) быть файл с именем .phpstorm.meta.php Этот файл содержит статический намек и какой экземпляр они используют.

Чтобы добавить свой собственный, просто бросьте его в существующий файл

ПРЕДУПРЕЖДЕНИЕ. Если вы объявите неправильный класс, вы в конечном итоге напишите код неправильно и смутитесь … это случилось со мной


Я включаю мою текущую конфигурацию, которая является личной для моего проекта, но дает больше понимания того, что делать.

 namespace PHPSTORM_META { $STATIC_METHOD_TYPES = [ \Zend\ServiceManager\ServiceLocatorInterface::get('') => [ /** * Common services */ 'doctrine.entitymanager.orm_default' instanceof \Doctrine\ORM\EntityManager, 'Zend\Db\Adapter\Adapter' instanceof \Zend\Db\Adapter\AdapterServiceFactory, /** Custom to Project */ 'RiotAdapter' instanceof \GameService\Service\RiotAdapter, 'SmiteAdapter' instanceof \GameService\Service\SmiteAdapter, 'GameService' instanceof \GameService\Service\GameService, ], ]; } 

Если вам нужна дополнительная информация об этом, вы можете посмотреть @ сообщение о слиянии с PHP Storm здесь