我已经找了好几个月了。我是喜欢自动完成的开发人员之一。对于ZendFramework2i中的每个Service调用,输入提示如下:
没有全局提示文件
/** @var \Module\Service\SuperService $superService */
$superService => $this->getServiceLocator()>get('\Module\Service\SuperService');
$superService->coolFunction();这是可行的,但是当您开始在一个控制器中获得2-4服务时,代码会变得很混乱。我试图找到一种更好的方法来使用PHP并键入提示服务定位器调用
发布于 2016-03-29 10:59:38
虽然这一点现在对您没有帮助,但您应该知道,我们已经接近于无条件地支持这一目标,但有几个条件:
Container\Interop\ContainerInterface,ZF2的ServiceManager已经这样做了。::class超级全局超魔法内容来命名和检索您的类。在您的示例中,只需将get调用中的字符串替换为Module\Service\SuperService::class (可从PHP5.4及更高版本获得)。我预计这个功能将在我们的下一个版本PhpStorm 2016.2中提供,该版本将于夏季左右发布。
加里
发布于 2015-11-20 18:54:17
大约一个月前,PHP发布了一个新特性,允许静态文件用于类型提示。我个人只将它用于服务定位器,但它可以用于PHP Storm无法遵循的许多其他事情,因为它并不神奇。
带有全局提示文件
$superService = $this->getServiceLocator()->get('\Module\Service\SuperService');
$superService->coolFunction();这为我们作为开发人员做了几件事:
做什么?
在composer.json),项目根(与相同的位置)中,应该有一个名为.phpstorm.meta.php的文件(如果不是创建的话),该文件包含静态提示以及它们使用的实例。
要添加自己的文件,只需将其放入现有的文件中即可。
警告-如果您声明了错误的类,您最终会错误地编写代码,并混淆.这件事发生在我身上
我包括我目前的Config,这是我的项目的个人,但给予了更多的理解,以做什么。
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 这里中的@ confluence帖子。
https://stackoverflow.com/questions/33834046
复制相似问题