我正在尝试创建一个服务来保存/刷新来自 json 提要的数据到原则
服务依赖项包括:
- 学说实体经理
- 拉取数据的 API
我的服务配置:
services:
fantasyapi:
class: FantasyDataAPIClient
arguments: ["%fantasyapi.key%"]
stadium_parser:
class: FantasyProDataBundleDataManagerStadiumParser
arguments: ["@doctrine.orm.entity_manager", "@fantasyapi"]
我的服务:
<?php
namespace FantasyProDataBundleDataManager;
use DoctrineORMEntityManager;
use FantasyDataAPIClient;
use FantasyProDataBundleEntityStadium;
class StadiumParser {
/**
* @var EntityManager $em
*/
private $em;
/**
* @var Client $client
*/
private $client;
public function __constuct( EntityManager $em, Client $client) {
$this->em = $em;
$this->client = $client;
}
/**
* @return array
*/
public Function parseData(){
$stadiumData = $this->client->Stadiums();
//var_dump($stadiumData);
//get the Repo
$repo = $this->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->persist( $currentStadium );
}
$this->em->flush();
return $log;
}
我从控制器调用此服务:
public function StadiumServiceTestAction(){
$parser = $this->container->get('stadium_parser');
$log = $parser->parseData();
return $this->render('DataBundle:Default:index.html.twig', array('log' => $log));
}
当我打电话时 $stadiumData = $this->client->Stadiums();
我收到以下错误:Call to a member function Stadiums() on a non-object
如果我在方法开始时执行var_dump($this);
,我会得到:
object(FantasyProDataBundleDataManagerStadiumParser)[5133]
private 'em' => null
private 'client' => null
为什么没有注入依赖项?如果我做php app/console container:debug
我的服务被列出
[container] Information for service stadium_parser
Service Id stadium_parser
Class FantasyProDataBundleDataManagerStadiumParser
Tags -
Scope container
Public yes
Synthetic no
Required File -
我也执行了 php app/console cache:clear --env=dev
但无济于事
由于所有参数都应该注入到构建器中,因此您可以考虑将方法重命名为__constuct
__construct
。