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:
El contenedor necesita implementar
Container/Interop/ContainerInterface
del proyectoContainer/Interop/ContainerInterface
que ya hace el ServiceManager de ZF2.Necesitas usar
::class
super-global-hyper-magic-contant para nombrar y recuperar tus clases. En su caso, simplemente reemplace la cadena en su llamada aget
conModule/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