Symfony2 передает данные между пакетами и контроллерами

это скорее вопрос «лучшей практики», чем реальная проблема:

Я работаю над проектом в Symfony 2, и я создал пакет для обработки всех мои веб-сервисы. По сути, один контроллер принимает некоторые данные JSON, отправляет их другому контроллеру, чтобы проверить его соответствие описанному формату, затем переходит к другому контроллеру для обработки вызовов базы данных и, в конечном итоге, возвращается к исходному контроллеру для возврата ответа JSON.

Я отправляю данные между контроллерами, делая что-то вроде этого:

$controller = new \Acme\myBundle\Controller\DefaultController;
$response = $controller->function();

Это работает правильно, но я все время сталкиваюсь с одной проблемой. В контроллере я передаю данные, мне нужно создать экземпляр AppKernel и вызвать функцию загрузки для работы любой функции Symfony. Мне это кажется немного глупым, что наводит меня на мысль, что я, возможно, все делаю неправильно.

Любые предложения или советы приветствуются!

ИЗМЕНИТЬ / ОБНОВИТЬ Всем спасибо за комментарии. Я настроил свои контроллеры как службы, службы работают, но мне все еще нужно вручную загружать / создавать экземпляр ядра, когда я вызываю службу изнутри службы.

#config.yml
# API Services
services:
service.handler:
    class: Acme\APIBundle\Controller\ServicesController
    arguments:
        container: "@service_container"

service.definitions:
    class: Acme\APIBundle\Controller\DefinitionController
    arguments:
        container: "@service_container"

Из другого контроллера пакетов я могу без проблем вызвать функцию из любой из этих служб:

 $test = $this->get("service.handler")->testFunction();
 $test2 = $this->get("service.definitions")->anotherTestFunction();

У меня ДЕЙСТВИТЕЛЬНАЯ проблема возникает, если я вызываю функцию внутри одной службы, а затем пытаюсь вызвать другую службу изнутри этой службы. service Я получаю следующую ошибку PHP

Fatal error: Call to a member function get() on a non-object in /vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 188

. Я могу избежать этой ошибки, используя эту функцию и вызывая ее, вместо того, чтобы использовать $ this

    public function bootKernel(){
//boot kernel
    $controller = new \Acme\myBundle\Controller\DefaultController; 
    $kernel = new \AppKernel('dev', true);$kernel->loadClassCache(); 
    $kernel->boot(); 
    $controller->setContainer($kernel->getContainer());
    return($controller);    
}

Я думаю, мое решение «работает», но это определенно не кажется эффективным способом делать что-то .

РЕДАКТИРОВАТЬ 2: Если я вставлю это в начало класса, а затем изменю вызов службы, он, кажется, работает ... Все еще не уверен, лучший ли это способ делать что-то.

    protected $container;

public function __construct($container) {
    $this->container= $container;
}
5
задан j0k 20 September 2012 в 12:04
поделиться