Ich habe viele Themen dazu gelesen und ich kann keine Lösung für mein Problem finden.
Ich habe das Gefühl, dass das Problem offensichtlich ist und vielleicht habe ich es einfach zu lange angeguckt.
Der Fehler ist FatalErrorException: Fehler: Aufruf einer Memberfunktion hat () auf einem Nichtobjekt in / vagrant / vendor / symfony / symfony / src / Symfony / Bundle / FrameworkBundle / Controller / Controller.php Zeile 198
Betrachtet man die Fehlerzeile, heißt es.
%Vor%Hier ist mein Code ...
Dies ist der Hauptcontroller, der den DAO-Controller aufruft.
%Vor%Dies ist der Dienst, der verwendet wird.
%Vor%Dies ist der DAO-Controller, der die Datenbank aufruft.
%Vor%Ich denke, das Problem ist, dass der Doktrin-Container nicht vorhanden ist, weshalb ich Probleme habe. Ich bin mir nicht sicher, wie ich das lösen soll.
Jede Hilfe wird geschätzt. Vielen Dank!
Bearbeiten
Ok, hier ist was ich geändert habe.
Main Controller blieb gleich.
DAO Controller ein paar Dinge wurden hinzugefügt.
%Vor%Der Service endete so.
%Vor%Das Problem ist, dass der Container hier nicht in den Controller injiziert wird.
Normalerweise führt Symfony dies automatisch aus, wenn Sie Symfony\Bundle\FrameworkBundle\Controller\Controller
erweitern, was wiederum Symfony\Component\DependencyInjection\ContainerAware
erweitert:
Der Container wird mit in den Controller (falls nicht explizit als Dienst definiert) eingefügt Setter-Injektion , die die Methode setContainer()
mit dem Container als Argument aufruft.
Jetzt, als Sie Ihren Controller als Dienst konfiguriert haben, müssen Sie den Aufruf von setContainer zu Ihrer Dienstkonfiguration hinzufügen:
%Vor%Löschen Sie anschließend Ihren Cache.
Nicht sicher, warum Sie einen Controller zu einem Dienst machen würden. Für welchen Anwendungsfall? Normalerweise ist ein Dienst ein einfaches altes PHP-Objekt.
Über Ihr Problem. Da Sie den Controller als Dienst verwenden, wird der Container nicht automatisch abgerufen. Sie müssen also den gesamten Behälter injizieren, was ziemlich schwer ist, wenn Sie nur eine Doktrin brauchen.
Es ist also besser, nur die Dinge zu injizieren, die Sie wirklich brauchen. Um die Lehre zu injizieren, in deinem Yml unter class:
Dann in Ihrem Controller-Konstruktor:
%Vor%Möglicherweise müssen Sie den übergeordneten Konstruktor aufrufen (beachten Sie dies).
Wenn Sie den kompletten Service Container trotzdem injizieren möchten, hier ist der richtige Abschnitt im Handbuch, wie Sie das tun können: Ссылка