【问题标题】:Does Doctrine/PHP integration offer Autocomplete in IDE? [duplicate]Doctrine/PHP 集成是否在 IDE 中提供自动完成功能? [复制]
【发布时间】:2015-12-27 07:53:55
【问题描述】:

使用 PHP + Doctrine 我得到了这个:

    //retrieve data
    $entityManager = $this->getEntityManager();
    $all = $entityManager->getRepository('\Entity\ServiceType')->findAll();
    foreach($all as $value)
        $options[$value->getId()] = $value->getServiceType();

IDE 中的自动完成功能不建议遵循-> 的方法,即getId()getServiceType() 之类的方法。

而且 PHP 不提供(简单的)转换为所需的类型....

【问题讨论】:

  • 使用的是哪个 ide?​​span>

标签: php doctrine-orm autocomplete phpdoc zend-studio


【解决方案1】:

您需要输入提示让 IDE 知道存储库返回的模型类型。

getRepository 方法返回一个Doctrine\ORM\EntityRepository,它在调用findAll() 时不知道您要查找的实体类型(而 find all 返回一个array)。

/** @var \Entity\ServiceType[] $all */
$all = $entityManager->getRepository('\Entity\ServiceType')->findAll();

应该做的伎俩。


编辑:
显然并非所有 IDE 都支持这一点。 如果是这种情况,您可以在 foreach 循环中为 $value 变体创建一个类型提示注释:

/** @var \Entity\ServiceType[] $all */
$all = $entityManager->getRepository('\Entity\ServiceType')->findAll();
foreach($all as $value) {
    /** @var \Entity\ServiceType $value */
    $options[$value->getId()] = $value->getServiceType();
}

第一个提示给团队中使用 Jetbrains IDE 的任何开发人员,第二个提示给其他人!

【讨论】:

  • 不适用于$all,但适用于$value
  • 抱歉,已将评论编辑为应有的样子。即,它是一个array,因此需要[] 才能将其提示为ServiceType 对象的列表。
  • 好吧...尝试了所有这些但不适用于所有...仍然
  • 啊,这可能是 Zend studio 的限制。然后你在$value 解决方案上的输入提示应该可以工作。上述解决方案应该可以在任何 jetbrains php IDE 中正常工作。 :)
【解决方案2】:

这似乎有效(v12.5):

    foreach ($all as $key => $value)
        /**
         * @var $value ServiceType
         */
        $options[$value->getId()] = $value->getId();

这似乎也有效(v13.0):

    /**
     * @var $all ServiceType
     */
    foreach ($all as $key => $value)
       $options[$value->getId()] = $value->getId();

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多