使用服务定位器为 PHP Storm 提供更快、更好、更高效的类型提示

2024-05-22

几个月来我一直在寻找一种方法来做到这一点。我是喜欢自动完成的开发人员之一。对于 zend Framework 2 中的每个服务定位器调用,我输入以下提示:

没有全局提示文件

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

这可行,但是当您开始在单个控制器中获取 2-4 个服务时,代码可能会变得混乱。我正在尝试找到一种更好的方法来使用 PHP Storm 和类型提示来调用服务定位器


大约一个月前,PHP Storm 发布了一项新功能,允许使用静态文件进行类型提示。我个人仅将其用于服务定位器,但它可以用于 PHP Storm 无法遵循的许多其他事情,因为它不是魔法。

带有全局提示文件

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

这为我们作为开发人员做了一些事情:

  • 团队合作(其他人将能够立即看到所有服务 模块)
  • Coding
  • Speed
  • 代码整洁
  • 代码标准
  • 点击即可更快进入课堂

该怎么办

In the 项目根目录(与作曲家.json),应该(如果没有则创建)一个名为.phpstorm.meta.php该文件包含静态提示以及它们使用的实例。

要添加您自己的文件,只需将其放入现有文件中即可

WARNING- 如果你声明了错误的类,你最终会写出错误的代码,并且感到困惑......这种情况在我身上发生过很多次


我包括了我当前的配置,它是我的项目的个人配置,但可以让我更多地了解要做什么。

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 Storm 的 @confluence 帖子here https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用服务定位器为 PHP Storm 提供更快、更好、更高效的类型提示 的相关文章

  • 如何使用 PHP 从我的网站发布图像?

    我正在尝试使用 php 发布图像 我已阅读文档并遵循了一些教程 我发送消息时没有任何问题 但是 它不适用于图像 我找不到我的错误在哪里 有人可以帮忙吗 我将深深感激
  • 如何从 AES 加密字符串添加/删除 PKCS7 填充?

    我正在尝试使用 128 位 AES 加密 ECB 来加密 解密字符串 我想知道如何添加 删除 PKCS7 填充 看起来 Mcrypt 扩展可以处理加密 解密 但必须手动添加 删除填充 有任何想法吗 让我们来看看 RFC 5652 加密消息语
  • 检测 PHP 中字符串的字符集(UTF-8 或 Windows-1256)

    我正在根据 简单的 HTML DOM http simplehtmldom sourceforge net 并且我想在获取 URL 的内部文本后检测字符串的字符集 以使用以下命令将其转换为 UTF 8 iconv 我尝试了很多东西 但没有一
  • document.querySelectorAll("input[type=checkbox") 的结果数组的顺序是否有保证?

    我在页面正文中有以下 HTML 这些是此 HTML 页面上类型复选框的唯一输入 fieldset legend North Face legend N A1 fieldset
  • 在 PHP 中强制以标准数学符号输出[重复]

    这个问题在这里已经有答案了 当我执行以下操作时echo 456 100000000我以科学记数法得到输出 4 56E 6 是否可以强制以标准符号输出 即0 00000456 看看这个函数 http php net manual en fun
  • MVC:如何使用ajax?

    我将使用 Zend Framework MVC 实现启动一个项目 我如何使用ajax 我的意思是 我应该将所有 ajax 代码放入控制器中吗 还是进入视野 例如 我想将作者 ivan 的帖子显示在页面上 通常 我创建一个指向 posts a
  • LinkedIn Groups API - 在单个 API 请求中获取多个群组的群组徽标

    Using LinkedIn 群组 API http developer linkedin com documents groups api 我正在显示用户在 LinkedIn 上所属的组列表 使用以下命令可以清楚地在一次调用中获取组列表
  • 在 TinyMCE 中使用新的 iframe 嵌入代码嵌入 YouTube 视频

    我尝试使用旧的嵌入代码将 YouTube 视频添加到 TinyMCE 中 效果很好 一些用户可能没有意识到他们必须点击 YouTube 嵌入代码链接中的旧嵌入代码选项才能添加它 我想让用户变得更容易 并允许他们直接复制新的嵌入代码并将其粘贴
  • 从图像创建 PDF 时设置文档名称

    我使用以下代码从 jpg 图像创建 pdf im new Imagick im gt readImage image jpg im gt setImageFormat pdf im gt writeImage images pdf imag
  • PHP - 存储和计算无线电输入的总分

    我设计了一个基于网络的小型系统 其中有一个学校评估表 可以向可以访问该系统的特定用户询问一些问题 并且输入将是单选类型 1或2或3或4 该代码正在运行 可以将输入插入数据库 但我不知道计算总分并将其存储在数据库中的正确查询 这是当前正在运行
  • 构建错误:致命错误:pcre.h:没有这样的文件或目录

    我刚刚安装完 Ubuntu 13 10 我想尝试 Phalcon 当我构建源代码 phalcon so 时 出现以下错误 from home fabrice Downloads cphalcon build 32bits phalcon c
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • Zend 框架将字母“f”输出到我的页面上

    我已经下载了 Zend 框架稳定版本 我相信是 1 11 上传到我的服务器 并将其添加到我的 php 包含路径中 我的目标是使用 Feed 和 Feed Writer 模块来处理一些 RSS 和 Atom 的繁重工作 问题是 每当我包含 F
  • 混合数组和对象

    我有一个像这样的数组 Array count gt 2 0 gt stdClass Object term id gt 3109 name gt Aliens Colonial Marines slug gt aliens colonial
  • jQuery id 选择器在有 .在 ID 中[重复]

    这个问题在这里已经有答案了 我的html代码如下 div class chatbox html markup which is validated div 在上面的代码中dipesh parmardiv 动态添加 我正在使用以下代码访问它
  • 如何使用 Laravel Eloquent 返回多重关系?

    我有一张桌子叫users 每个用户都有不同的事情 country device computer category 我为上述每一个 事物 创建了一个表格 类似如下 1 United States 2 United Kingdom 3 Aus
  • 使用 PHP 获取 2 个同名 HTML 输入标签的值

    假设我有下表
  • 为什么我不能在 TCPDF 表中使用 č,ć,đ 图表?

    我正在为我的网站构建一个 tcpdf 文件 该 tcpdf 文件中有一个包含一些数据的表格 但我无法使该章程正常工作 对于编码 我使用 windows 1250 宪章女巫不起作用 我已经尝试过 utf 8 但仍然没有得到这个章程 tcpdf
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t

随机推荐