更新了问题标题 对不起,如果这个问题的标题有点偏,我真的不确定如何用它来表达。
我正在尝试创建一个服务,该服务将从json提要中提取数据并通过doctrine将其保存/刷新到我的数据库。
经过多次搜索/阅读/试错,我设法让我的服务注册了:
services:
fantasyapi:
class: FantasyDataAPI\Client
arguments: ["%fantasyapi.key%"]
data_manager:
class: FantasyPro\DataBundle\DataManager\StadiumParser
arguments: ['@doctrine.orm.entity_manager', '@fantasyapi', ::DataBundle.Entity.Stadium]
我正在使用php风暴和symfony2插件。
如果我使用:
$repo = $this->em->getRepository('DataBundle:Stadium');
PHP风暴将其报告为未定义的函数。
但是,如果我使用
$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;
}
}
答案 0 :(得分:1)
您可以记录班级中每个成员的类型:
<?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;
/* ... */
由于某些原因,PHPStorm在我只使用类名时没有识别出类,所以我必须放入完整的命名空间,例如:
/* ... */
/** @var \Doctrine\ORM\EntityManager em */
private $em;
/* ... */