Hallo,
ich benötige innerhalb meiner Klasse das Rendering eines Content-Element. Hierzu folgender Code:
$cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
$tt_content_conf = array('tables' => 'tt_content', 'source' =>$uid, 'dontCheckPid' => 1);
$content = $cObj->RECORDS($tt_content_conf);
Kling nicht schwer und ich habe das Codebeispiel öfter wiedergefunden.
Ein Aufruf erzeugt jedoch eine Exception "Call to a member function enableFields() on null" die in /typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php geworfen wird.
Es scheint, als ob die Zeile 156
$loadDB->additionalWhere[$table] = $this->cObj->enableFields($table);
das cObj nicht ordentlich initialisiert bzw. übernommen hat.
Ein Idee, was ich falsch mache oder dem Fehler auf die Schliche komme?
Gruß,
Matschek
Mit welcher TYPO3-Version arbeitest Du? Konnte die Codestelle eben nicht finden, um zu Testen.
Das ist unter der 7.6.10. Zzt ist das Problem verschoben, aber es wird mich vermutlich wieder einholen. Evtl hängt es mit dem Kontext zusammen. Ich habe Threads in die Richtung gefunden die den FrontendController auf abenteuerliche Weise über 2 Bildschirmseiten initialisieren um in z.B. im Scheduler-Kontext zu nutzen.
Hm, also den FrontendController brauchst Du hier gar nicht. Das cObj ist ein ContentObjectRenderer.
Eigentlich dürftest Du in die Situation gar nicht kommen: RECORDS() ruft getContentObject() auf, und von dortaus den Konstruktor von RecordsContentObject mit sich selbst (also einem ContentObjectRenderer) als zweiten Argument => im RecordsContentObject müsste cObj ein gültiges ContentObjectRenderer-Objekt sein (andernfalls hätte man da gar nicht hinkommen können)...
Evtl. liegt die Ursache in Deinem cObject, über das Du RECORD() aufrufst:
Du müsstest aus Deinem Controller heraus auch direkt auf ein cObject zugreifen können, ohne selbst eines Instatziieren zu müssen:
$this->configurationManager->getContentObject();