PHPStorm 对属性的引用似乎是错误的
PHPStorm References to properties seems wrong
更新了问题标题
对不起,如果这个问题的标题有点不对劲,我真的不知道该如何表达。
我正在尝试创建一项服务,该服务将从 json 提要中提取数据并通过学说 persist/flush 将其添加到我的数据库中。
经过多次 searching/reading/trial 和错误后,我设法注册了我的服务:
services:
fantasyapi:
class: FantasyDataAPI\Client
arguments: ["%fantasyapi.key%"]
data_manager:
class: FantasyPro\DataBundle\DataManager\StadiumParser
arguments: ['@doctrine.orm.entity_manager', '@fantasyapi', ::DataBundle.Entity.Stadium]
我正在使用带有 symfony2 插件的 php 风暴。
如果我使用:
$repo = $this->em->getRepository('DataBundle:Stadium');
PHP storm 将其报告为未定义函数。
但是如果我使用
$repo = $this->em->em->getRepository('DataBundle:Stadium');
php storm 没有将其报告为未定义。
我觉得我做错了什么,因为使用 ->em->em->getRepository
感觉不对。
我是否正确实例化了服务?如果是,为什么我必须复制对函数的引用?
这是我的服务的完整代码:
<?php
namespace FantasyPro\DataBundle\DataManager;
use Doctrine\ORM\EntityManager;
use FantasyDataAPI\Client;
use FantasyPro\DataBundle\Entity\Stadium;
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;
}
}
您可以记录每个成员的类型 class:
<?php
namespace FantasyPro\DataBundle\DataManager;
use Doctrine\ORM\EntityManager;
use FantasyDataAPI\Client;
use FantasyPro\DataBundle\Entity\Stadium;
class StadiumParser
{
/** @var EntityManager em */
private $em;
/** @var Client client */
private $client;
/** @var Stadium stadium */
private $stadium;
/* ... */
出于某种原因,当我只使用 class 名称时,PHPStorm 无法识别 classes,所以我不得不输入完整的命名空间,例如:
/* ... */
/** @var \Doctrine\ORM\EntityManager em */
private $em;
/* ... */
更新了问题标题 对不起,如果这个问题的标题有点不对劲,我真的不知道该如何表达。
我正在尝试创建一项服务,该服务将从 json 提要中提取数据并通过学说 persist/flush 将其添加到我的数据库中。
经过多次 searching/reading/trial 和错误后,我设法注册了我的服务:
services:
fantasyapi:
class: FantasyDataAPI\Client
arguments: ["%fantasyapi.key%"]
data_manager:
class: FantasyPro\DataBundle\DataManager\StadiumParser
arguments: ['@doctrine.orm.entity_manager', '@fantasyapi', ::DataBundle.Entity.Stadium]
我正在使用带有 symfony2 插件的 php 风暴。
如果我使用:
$repo = $this->em->getRepository('DataBundle:Stadium');
PHP storm 将其报告为未定义函数。
但是如果我使用
$repo = $this->em->em->getRepository('DataBundle:Stadium');
php storm 没有将其报告为未定义。
我觉得我做错了什么,因为使用 ->em->em->getRepository
感觉不对。
我是否正确实例化了服务?如果是,为什么我必须复制对函数的引用?
这是我的服务的完整代码:
<?php
namespace FantasyPro\DataBundle\DataManager;
use Doctrine\ORM\EntityManager;
use FantasyDataAPI\Client;
use FantasyPro\DataBundle\Entity\Stadium;
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;
}
}
您可以记录每个成员的类型 class:
<?php
namespace FantasyPro\DataBundle\DataManager;
use Doctrine\ORM\EntityManager;
use FantasyDataAPI\Client;
use FantasyPro\DataBundle\Entity\Stadium;
class StadiumParser
{
/** @var EntityManager em */
private $em;
/** @var Client client */
private $client;
/** @var Stadium stadium */
private $stadium;
/* ... */
出于某种原因,当我只使用 class 名称时,PHPStorm 无法识别 classes,所以我不得不输入完整的命名空间,例如:
/* ... */
/** @var \Doctrine\ORM\EntityManager em */
private $em;
/* ... */