Symfony2 服务未注册依赖项



我正在尝试创建一个服务来保存/刷新来自 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

最新更新