6.5. IDE integration
IDE 集成
理想情况下,应用程序代码不应直接使用DI容器:应首选依赖项注入。但是,在某些情况下,可能会直接调用容器:
- 编写根应用程序类(前端控制器等)或更通用的框架时
- 编写工厂时
- 维护或迁移旧版应用程序时
- 编写功能测试时
- ...
在这种情况下,能够受益于自动完成,重构支持等完整的IDE功能非常有价值。
注释块内联
IDE支持的基本方法是在注释块中使用@var
标记:
/** @var $repository UserRepository */
$repository = $this->container->get(UserRepository::class);
// IDE现在可以自动完成此语句
$repository->
此解决方案很简单,并且在很少使用容器时效果很好。
PhpStorm 集成
Metadata 文件
如果该文件位于您项目的根目录中,PhpStorm 会从 .phpstorm.meta.php
文件中加载 metadata。 这是一个示例,它增加了对PHP-DI甚至所有PSR-11容器的支持:
<?php
namespace PHPSTORM_META
{
override(\Psr\Container\ContainerInterface::get(0), map([
'' => '@',
]));
override(\DI\Container::get(0), map([
'' => '@',
]));
}
该配置将使PhpStorm假定-> get('...')
返回的任何内容都是第一个参数的实例。例如,将->get('DateTime')
(或-> get(DateTime :: class)
)的返回识别成DateTime
对象。
但是,如果您的服务名称不是类或接口,则此方法将不起作用,例如,PhpStorm无法理解->get('foo.bar')
。
注意:您可能需要在添加此文件后重新启动IDE,以确保PhpStorm对其生效。
PhpStorm 插件
如果您不想在每个项目中编写.phpstorm.meta.php
文件,则可以安装由Anatoly Pulyaevskiy创建的PHP-DI插件。可以通过在第三方插件列表中搜索PHP-DI将插件安装在PhpStorm中。
此插件提供了与.phpstorm.meta.php
相同功能,并且具有相同的限制。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。