2014-01-15 2 views
4

Я новичок в Symfony 2 и пытаюсь создать простое приложение для изучения. Я создал комплект GoogleApiBundle. Внутри пучка, у меня есть контроллер YouTubeController, который является служба:Сервисный контейнер Symfony 2: null

//services.yml 
service: 
    myname_googleapi_youtube: 
     class: Myname\GoogleApiBundle\Controller\YouTubeController 

В другом расслоении, я пытаюсь вызвать функцию в YouTubeController

//anotherController.php 
$service = $this->get('myname_googleapi_youtube'); 
$result = $service->getResultFunction(); 

//YouTubeController.php 
public function getResultFunction() 
{ 
    $parameter = $this->container->getParameter('a'); 
    //... 
} 

Тогда я получаю исключение FatalErrorException: Error: Call to a member function getParameter() on a non-object ..., потому что $this->container есть NULL.

Я искал, но не получил ответа. Я делаю неправильно?

ответ

5
//services.yml 
service: 
    myname_googleapi_youtube: 
     class: Myname\GoogleApiBundle\Controller\YouTubeController 
     arguments: [@service_container] 

И вы бы:

<?php 

namespace Myname\GoogleApiBundle\Controller 

use Symfony\Component\DependencyInjection\ContainerInterface; 

class YouTubeController 
{ 
    /** 
    * @param ContainerInterface $container 
    */ 
    public function __construct(ContainerInterface $container) 
    { 
     $this->container = $container; 
    } 

    /** 
    * Obtain some results 
    */ 
    public function getResultFunction() 
    { 
     $parameter = $this->container->getParameter('a'); 
     //... 
    } 

    /** 
    * Get a service from the container 
    * 
    * @param string The service to get 
    */ 
    protected function get($service) 
    { 
     return $this->container->get($service); 
    } 
} 

Эта практика очень спорно, поэтому я рекомендовал бы, что вы быстро читать на них:

+0

спасибо. Я получил исключение «ServiceNotFoundException: служба myname_googleapi_youtube» имеет зависимость от несуществующей службы «session_container». – DrXCheng

+0

Ха-ха, извините, это 'service_container' :) Я обновил код – Mick

+2

Perfect! Благодаря! – DrXCheng

Смежные вопросы