symfony2服务没有注册依赖项

时间:2015-04-23 13:45:55

标签: symfony service dependencies

我试图创建一个服务来保存/刷新json feed中的数据到教义

服务依赖项是:

  • Doctrine EntityManager
  • 拉动数据的Api

我的服务配置:

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,但无济于事

1 个答案:

答案 0 :(得分:2)

由于假设所有参数都被注入到结构中,您可以考虑将方法__constuct重命名为__construct