Symfony2 Weitergabe von Daten zwischen bundles & Controller

dies ist mehr ein "best-practice" - Frage als ein Tatsächliches problem:

Arbeite ich an einem Projekt in Symfony 2 und ich habe gebaut ein bundle mit all meiner webservices. Im Grunde ein controller nimmt einige JSON-Daten, sendet es an einen anderen controller, um zu sehen, es entspricht einer beschriebenen format, dann auf einen anderen controller zu handhaben, die Datenbank-Aufrufe und schließlich zurück an den ersten controller wieder eine JSON-Antwort.

Ich bin senden von Daten zwischen Steuerungen von etwas wie dies:

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

Dies funktioniert einwandfrei, aber ich komme immer über ein problem. Im controller gebe ich Daten brauche ich, um zu instanziieren AppKernel und rufen Sie die boot-Funktion für alle Symfony-Funktion zu arbeiten. Dies scheint mir ein wenig albern, die führt mich zu glauben, ich kann dies alles falsch.

Irgendwelche Vorschläge oder Tipps dankbar!

BEARBEITEN/AKTUALISIEREN
Danke Euch allen für die Kommentare. Ich habe meinen Controller als services, die Dienste funktionieren aber ich bin immer noch brauchen, um manuell starten/erstellen der kernel, wenn ich den Aufruf eines service innerhalb einer service.

#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"

Anderen bundles controller kann ich dann eine Funktion aufrufen, die entweder aus den entsprechenden services ohne problem:

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

Denen ich ein problem habe ist, wenn ich rufe eine Funktion innerhalb eines service, dann rufen Sie versuchen, einen anderen Dienst innerhalb dieses Dienstes bekomme ich folgende PHP-Fehler

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

Kann ich vermeiden, dass Fehler durch die Verwendung dieser Funktion und nennen es anstatt $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);    
}

Ich denke, meine Lösung "funktioniert", aber es ist sicherlich nicht scheinen eine effiziente Art und Weise, Dinge zu tun.

EDIT 2:
Wenn ich kleben diesen an der Spitze der Klasse, dann ändern Sie den service anrufen scheint es zu funktionieren... immer Noch nicht sicher, ob dies der beste Weg, Dinge zu tun.

    protected $container;

public function __construct($container) {
    $this->container= $container;
}
  • Ich denke, die Spedition kann eine option sein, hier.
  • Gibt es einen Grund, warum man nicht mit services, um Ihre verschiedenen Methoden?
InformationsquelleAutor greg | 2012-03-03
Schreibe einen Kommentar