我试图创建一个服务来保存/刷新json feed中的数据到教义
服务依赖项是:
我的服务配置:
services:
fantasyapi:
class: FantasyDataAPI\Client
arguments: ["%fantasyapi.key%"]
stadium_parser:
class: FantasyPro\DataBundle\DataManager\StadiumParser
arguments: ["@doctrine.orm.entity_manager", "@fantasyapi"]
我的服务:
<?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;
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(FantasyPro\DataBundle\DataManager\StadiumParser)[5133]
private 'em' => null
private 'client' => null
为什么没有注入依赖项?
如果我执行php app/console container:debug
我的服务已列出
[container] Information for service stadium_parser
Service Id stadium_parser
Class FantasyPro\DataBundle\DataManager\StadiumParser
Tags -
Scope container
Public yes
Synthetic no
Required File -
我还执行了php app/console cache:clear --env=dev
,但无济于事
答案 0 :(得分:2)
由于假设所有参数都被注入到结构中,您可以考虑将方法__constuct
重命名为__construct
。