2017-08-22 3 views
0

Ich mag die Objekte eines Endlager bekommen, aber ich habe nächsten FehlerFatal error: Call auf eine Elementfunktion findAll() auf null in TYPO3

Call to a member function findAll() on null

Die Fehlerzeile ist $projects = $this->projectRepository->findAll();

zuerst verwendet der Objektmanager, um das Repository zu bekommen, hat es nicht funktioniert. Die aktuelle Konfiguration ist: Kontroller

/** 
*projectRepository 
* 
* @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository 
* @inject 
*/ 
protected $projectRepository = null; 

Und Repository

class ProjectRepository extends \TYPO3\CMS\Extbase\Persistence\Repository 
{ 
    public function createQuery() { 
    $query = parent::createQuery(); 
    $query->getQuerySettings()->setRespectStoragePage(FALSE); 
    return $query; 
    } 
} 

Dies geschieht auch mit findByUid($uid)

Die Objekte im DB und sichtbar in BE existiert.

Ich säuberte die Caches, löschte den Inhalt des typo3temp Verzeichnisses und folgte den Fragen über einen ähnlichen Fehler (der ich dachte) Call to a member function findAll() on a non-object, aber es hat nicht funktioniert und die Ausnahme, die ich habe, ist anders.

ich Ihre Hilfe schätzen, bitte leite mich diesen Fehler

+1

Nun, das '$ this- schlägt> projectRepository' ist nicht das, was Sie denken, es ist. Dump es aus und werfen Sie einen Blick. Angenommen, Ihre Protokolle zeigen einen anderen Fehler, den Sie betrachten müssen. Wie Ihr Autoloader schlägt fehl oder Sie haben einen Tippfehler in den Metadaten auf diesen c Stil Kommentare. – ficuscr

+0

Oder versuchen Sie einfach, eine Instanz Ihres Repositorys wie folgt in Ihrer Indexaktion zu erstellen: '$ test = new \ VENDOR \ MyExtName \ Domäne \ Repository \ ProjectRepository();' und wenn das fehlschlägt, haben Sie mehr Informationen, was falsch ist. – Wolfgang

+0

Ich benutzte 'var_dump' für das Attribut print vor der Verwendung' findAll() 'Anweisung, und sah die richtige Instanz meines Repository –

Antwort

1

Dieser Fehler zu korrigieren, wird fast immer durch die Anmerkung verursacht von extbase und im Zusammenhang mit dem Cache „Kompilieren“. Sie haben gesagt, dass Sie die Caches gelöscht und den Inhalt von typo3temp entfernt haben, aber die Methoden zum Löschen des Caches sind sehr unterschiedlich und sie funktionieren nicht für jeden Cache.

Zum Beispiel wird der Anmerkungscache nur gelöscht, indem die Schaltfläche Cache löschen des Installationsprogramms verwendet wird. Die Symbolleistensymbole oben auf dem TYPO3-Backend löschen diese Art von Caches nicht.

Die Anmerkungscaches werden nicht im typo3temp-Ordner afaik gespeichert, sondern haben ihren eigenen Abschnitt in der Datenbank. Das Löschen des Cache sollte NIEMALS erfolgen, indem der Inhalt des typo3temp-Ordners von Hand gelöscht wird, sondern IMMER über das Install Tool oder die entsprechenden Schaltflächen oder Befehle im TYPO3-Backend oder der CLI.

Schließlich gibt es einen Autoload-Cache von PHP-Klassen, der auch nicht vom Install Tool gelöscht wird. Wenn Sie also eine neue PHP-Klasse zu Ihrer Erweiterung hinzufügen, müssen Sie Ihre Erweiterung über den Erweiterungsmanager deinstallieren und neu installieren. Wenn Sie mit composer Ihre TYPO3-Instance installieren, ist es wieder ein wenig anders. Wenn dies der Fall ist, können Sie den Autoload-Cache löschen, indem Sie den Befehl composer dump-autoload eingeben, um den Klassenlade-Cache von Composer zu löschen, da TYPO3 ihn im Composer-Modus verwendet.

Ich vermute, dass Sie einfach nicht versucht, die Schaltfläche "Install Tool", um den Cache zu löschen.

+0

Danke, es funktioniert mit der Schaltfläche deaktivieren Chaches von Install Tool, aber zeigte mir andere Fehler vom Typ' Hoppla 'Fehler, die besagt' PHP Warnung: class_parents(): Objekt oder String erwartet in .... '. Ich habe typo3temp Inhalt gelöscht und Caches seit der Toolbar auf BE von TYPO3 gelöscht und alles jetzt funktioniert. –

+0

Jetzt benutze ich andere Repository der anderen Entität und in der 'findAll()' passiert wieder, ich klickte nur die sauberen Caches seit Install Tool und funktioniert einwandfrei. –

0

Und dieser Fehler tritt auf, wenn Sie vergessen, Ihr Repository in Ihrem Controller zu injizieren:

/** 
*projectRepository 
* 
* @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository 
* @inject 
*/ 
protected $projectRepository = null; 
Verwandte Themen