Zum Inhalt springen

Fatal-Error "Allowed memory size" und Verständnisproblem

Erstellt am 25. Februar 2015 · 1 Antwort · letzte Antwort am 2. März 2015

Tags: Frage

jochla ·

Hallo,

zuerst möchte ich mich gleich für mein Cross-Posting (http://www.typo3forum.net/forum/typo3-extbase/76109-fatal-error-verstaendnisproblem.html und TYPO3 German Mailingliste) entschuldigen, aber ich trete auf der Stelle und komme nicht weiter.

In einer eigenen Extbase-Extension (die schon ohne Probleme funktioniert hat) erhalte ich den Fehler "Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 69295 bytes) in ...". Mit var_dump im Repository habe ich nun herausgefunden, dass mein "return $query->execute();" x Mal ausgeführt wird. Das verstehe ich nicht!??? Oder interpretiere ich die Dump-Ausgabe falsch?

In meinem List-Template habe ich diese Verarbeitungsstruktur:

<f:if condition="{cruises}">
<f:then>
<f:for each="{cruises}" as="cruise" iteration="cruiseIterator">
<f:cycle values="{0: 'even', 1: 'odd'}" as="class">
<tr class="tr-{class} tr-{cruiseIterator.index}{f:if(condition:cruiseIterator.isLast, then: ' tr-last')}" >
...
</f:cycle>
</f:for>
</f:then>
<f:else>
...
</f:else>
</f:if>

In meiner listAction() lese ich mit einer eigenen Find-Funktion:

$cruises = $this->cruiseRepository->findBySelectedCriteria($this->settings);
$this->view->assign('cruises', $cruises);

Im Model sind alle Relationen mit @lazy deklariert.

Im Repository habe ich in der Funktion "findBySelectedCriteria()" einen Extbase Variable Dump von "$query->execute()" eingesetzt, den ich nach mehr als 70 Auflistungen im Browser abgebrochen habe:

TYPO3\CMS\Extbase\Persistence\Generic\QueryResultprototypeobject (21 items)
0 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=189, pid=102)
1 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=185, pid=102)
2 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=188, pid=102)
3 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=184, pid=102)
4 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=20, pid=102)
5 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=108, pid=102)
6 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=110, pid=102)
7 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=14, pid=102)
8 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=111, pid=102)
9 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=112, pid=102)
10 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=107, pid=102)
11 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=113, pid=102)
12 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=106, pid=102)
13 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=105, pid=102)
14 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=104, pid=102)
15 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=103, pid=102)
16 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=193, pid=102)
17 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=102, pid=102)
18 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=114, pid=102)
19 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=25, pid=102)
20 => XXX\Extension\Domain\Model\Cruiseprototypepersistent entity (uid=115, pid=102)

Das Ergebnis von 21 gefundenen Datensätzen entspricht der Datenmenge für die angegebenen Suchkriterien.
Auf einer Seite, auf der aufgrund der Suchkriterien korrekterweise keine Datensätze gefunden / ausgegeben werden, wird Extbase var_dump 2.047 ! mal ausgegeben: TYPO3\CMS\Extbase\Persistence\Generic\QueryResultprototypeobject (empty) !???

Irgendwelche Veränderungen die vermeintlich mit diesem Problem zusammenhängen können, sind mir nicht bewusst. Ich verstehe das nicht und steh komplett auf dem Schlauch. Wer kann mir bitte weiterhelfen?

Im voraus schon mal eine dickes DANKE an alle, die sich mit meinem Problem auseinandersetzen.

Johannes.

jochla ·

Das Problem konnte ich mit Unterstützung lösen. Ursache war gar nicht die Extension selbst, sondern Typoscript Code, mit dem ich nur dann die Überschrift des Plugin-Inhaltselements ausgeben wollte, wenn auch Datensätze gefunden wurden:

tt_content.list.20.extension_plugin.stdWrap.preCObject = COA
tt_content.list.20.extension_plugin.stdWrap.preCObject {
  10 = TEXT
  10 {
    field = header
    wrap = <h2>|</h2>
    if.isTrue.cObject =< tt_content.list.20.extesnion_plugin  <-- Ursache
  }
}

Das hat anscheinend dazu geführt, dass das Plugin rekursiv aufgerufen wurde.