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相同功能,并且具有相同的限制。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/php-di/6.0/ide-...

译文地址:https://learnku.com/docs/php-di/6.0/ide-...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~