storm for best php zend-framework2 phpstorm service-locator

for - phpstorm price



Sugerencia de tipo más rápida, mejor y más eficiente para PHP Storm con localizadores de servicios (2)

He estado buscando una manera de hacer esto durante meses. Soy uno de esos desarrolladores que adora el autocompletado. Para cada Localizador de servicios, llame a zend framework 2 y escriba sugerencia con lo siguiente:

Sin archivo global de sugerencias

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

Esto funciona, pero el código puede ser complicado cuando comienzas a obtener 2-4 servicios en un solo controlador. Estoy tratando de encontrar una mejor manera de utilizar PHP Storm y escribir sugerencias para las llamadas al localizador de servicios


Hace aproximadamente un mes, PHP Storm lanzó una nueva característica que permite usar un archivo estático para la tipificación de tipo. Yo personalmente uso esto solo para el localizador de servicios, pero puede usarse para muchas otras cosas que PHP Storm no puede seguir porque no es mágico.

Con un archivo global de sugerencias

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

Esto hace algunas cosas para nosotros como desarrolladores:

  • Trabajo en equipo (otros podrán ver todos los servicios a la vez desde todos los módulos)
  • Codificación
  • Velocidad
  • Código de pulcritud
  • Estándares de código
  • Haga clic para ir a la clase más rápido

Qué hacer

En el proyecto ROOT (el mismo lugar que composer.json ), debería (crear si no) un archivo llamado .phpstorm.meta.php Este archivo contiene la sugerencia estática y qué instancia usan.

Para agregar el suyo, simplemente agréguelo dentro del archivo existente

ADVERTENCIA - Si declaras la clase incorrecta, terminarás escribiendo el código incorrecto, y confundido ... me ha pasado un montón

Estoy incluyendo mi configuración actual, que es personal para mi proyecto, pero me da una idea más clara de lo que debo hacer.

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, ], ]; }

Si desea obtener más información al respecto, puede buscar @ una publicación de confluencia de PHP Storm aquí


Si bien esto no te ayuda ahora, es útil que sepas que estamos cerca de apoyarlo de la siguiente manera, con algunas condiciones:

  1. El contenedor necesita implementar Container/Interop/ContainerInterface del proyecto Container/Interop/ContainerInterface que ya hace el ServiceManager de ZF2.

  2. Necesitas usar ::class super-global-hyper-magic-contant para nombrar y recuperar tus clases. En su caso, simplemente reemplace la cadena en su llamada a get con Module/Service/SuperService::class (disponible desde PHP 5.4 y superior).

Estoy esperando que esta funcionalidad esté disponible en nuestro próximo lanzamiento, PhpStorm 2016.2, que vence el verano.

Gary