contao/import — Issue #2731: loadLanguageFile Hook führt zu Absturz
Author: importer
Created: 2011-11-29 20:04:58+00:00
State: open
Labels: backend, Defect, Pending

Hi Leo,
meine survey_ce-Erweiterung kracht immer, wenn es eine installierte Erweiterung gibt, die den loadLanguageFile Hook verwendet. Das ganze passiert beim Aufrufen der Hook-Funktion in System.php. Der Import der Hook-Klasse liefert kein gültiges Objekt zurück, obwohl die Klasse existiert.

```
$this->import($callback[0]);
$this->$callback[0]->$callback[1]($strName, $strLanguage);
```

Eigentlich mache ich nichts dramatisches in survey_ce. Es handelt sich dabei um meine Umfrage-Erweiterung. Die benutzt jede Menge Fragentypen, die alle Nachfahren einer abstrakten Klasse SurveyQuestion sind, die wiederum ein Nachfahre von Backend ist.
An einigen Stellen im Backend instanziiere ich nun Objekte der SurveyQuestion-Nachfahren über das - meiner Meinung nach korrekte - Verfahren, dass ich

$class = 'Name_der_SurveyQuestion_Nachfahr_Klasse';
$this->import($class);
$obj = new $class();

Im Konstruktor der Klasse werden dann nach dem Aufrufen des Superkonstruktors mit $this->loadLanguageFile() benötigte Sprachdateien geladen. Funktioniert auch alles super, wenn der loadLanguageFile-Hook nirgendwo gesetzt ist. Sobald der aber gesetzt ist, kracht es dann eben beim Aufruf der Hook-Funktion, weil die Klasse nicht instanziiert wurde.

Ich hab schon versucht, alles mögliche zu debuggen, komme aber nicht weiter. Ich gehe mal davon aus, dass es eigentlich nicht an der import()-Methode liegt, denn die Funktioniert ja eigentlich immer. Aber offenbar kann man sie durch ungeschicktes Aufrufen an falschen Stellen offenbar durcheinander bringen, anders kann ich mir das nicht erklären.

Selbst wenn import rekursiv immer andere Klassen importiert, so müsste doch eigentlich erst ein Rücksprung erfolgen, wenn die ursprünglich gewünschte Klasse auch importiert ist, oder nicht?

Man kann das reproduzieren, indem man z.B. survey_ce installiert, eine Umfrage anlegt, Daten erzeugt und dann in die Teilnehmerauswertung geht. Ist 'ne Menge Holz und nicht so schnell zu machen. Wenn dann z.B. easy_themes installiert ist, das den loadLanguageFile Hook benutzt kracht es, sobald ich da in survey_ce mal loadLanguageFile() aufrufe.

Irgendwie nicht logisch das alles. Die Frage ist, hast du evtl. eine Idee was das sein kann? Die Lösung, zu überprüfen, ob durch import() auch wirklich ein Objekt erzeugt wurde und nur dann den Hook aufzurufen würde zwar das Problem beheben, aber ja sicherlich nicht die Ursache.

Wenn du das Gefühl hast, dass evtl. doch etwas mit der import() Methode nicht ganz koscher ist oder eine Idee hast, woran das evtl. liegen könnte, dann melde dich doch bitte bei mir. Ich kann dir auch ein Testszenario zukommen lassen bzw. einen Zugang auf einem Testsystem.

[Download the attachments](http://www.contao.org/tl_files/tickets/2731.zip "Download the attachments of this ticket")

--- _Originally created by hschottm on December 10th, 2010, at 06:56pm (ID 2731)_