PHPStorm 对属性的引用似乎是错误的



更新了问题标题对不起,如果这个问题的标题有点不对劲,我真的不知道该怎么措辞。

我正在尝试创建一个服务,该服务将从 json 提要中提取数据并通过原则将其持久/刷新到我的数据库中。

经过多次搜索/阅读/反复试验,我设法注册了我的服务:

services:
    fantasyapi:
        class:        FantasyDataAPIClient
        arguments:    ["%fantasyapi.key%"]
    data_manager:
      class: FantasyProDataBundleDataManagerStadiumParser
      arguments: ['@doctrine.orm.entity_manager', '@fantasyapi', ::DataBundle.Entity.Stadium]

我正在使用带有symfony2插件的php storm。

如果我使用:

$repo = $this->em->getRepository('DataBundle:Stadium');

PHP storm 将其报告为一个未定义的函数。

但是,如果我使用

$repo = $this->em->em->getRepository('DataBundle:Stadium');

PHP Storm 不会将其报告为未定义。

我想我做错了什么,因为使用->em->em->getRepository感觉不对。

我是否正确实例化了服务,如果是,为什么我必须复制对该函数的引用?

这是我服务的完整代码:

<?php
namespace FantasyProDataBundleDataManager;
use DoctrineORMEntityManager;
use FantasyDataAPIClient;
use FantasyProDataBundleEntityStadium;
class StadiumParser {
    private $em;
    private $client;
    private $stadium;
    /**
     * @param EntityManager $em
     * @param Client        $client
     * @param Stadium       $stadium
     */
    public function __constuct(EntityManager $em, Client $client, Stadium $stadium ) {
        $this->em = $em;
        $this->client = $client;
        $this->stadium = $stadium;
    }
    /**
     * @return array
     */
    public Function parseData(){
        $stadiumData = $this->client->client->Stadiums();
        //get the entity manager
        $repo = $this->em->em->getRepository('DataBundle:Stadium');
        $log = array();
        foreach ($stadiumData as $stadium) {
            // Get the current stadium in the list
            $criteria = array( 'stadiumID' => $stadium['StadiumID'] );
            $currentStadium = $repo-->FindOneBy( $criteria );
            if ( ! $currentStadium) {
                $currentStadium = new Stadium(); //no stadium with the StadiumID exists so create a new stadium
                $logData = [
                    'action'   => 'Added Stadium',
                    'itemID'   => $stadium['StadiumID'],
                    'itemName' => $stadium['Name']
                ];
                $log[] = $logData;
            } else {
                $logData = [
                    'action'   => 'Updated '.$logTitle,
                    'itemID'   => $stadium['PlayerID'],
                    'itemName' => $stadium['Name']
                ];
                $log[] = $logData;
            }
            $currentStadium->setStadiumID( $stadium['StadiumID'] );
            $currentStadium->setName( $stadium['Name'] );
            $currentStadium->setCity( $stadium['City'] );
            $currentStadium->setState( $stadium['State'] );
            $currentStadium->setCountry( $stadium['Country'] );
            $currentStadium->setCapacity( $stadium['Capacity'] );
            $currentStadium->setPlayingSurface( $stadium['PlayingSurface'] );
            $this->em->em->persist( $currentStadium );
        }
        $this->em->em->flush();
        return $log;
    }
}

您可以记录类中每个成员的类型:

<?php
namespace FantasyProDataBundleDataManager;
use DoctrineORMEntityManager;
use FantasyDataAPIClient;
use FantasyProDataBundleEntityStadium;
class StadiumParser
{ 
    /** @var EntityManager em */
    private $em;
    /** @var Client client */
    private $client;
    /** @var Stadium stadium */
    private $stadium;
    /* ... */

由于某种原因,当我只使用类名时,PHPStorm 无法识别类,所以我不得不放置完整的命名空间,例如:

    /* ... */
    /** @var DoctrineORMEntityManager em */
    private $em;
    /* ... */

最新更新