Extbase Repository: update() persistiert nicht? Nimm den Vorschlaghammer!

Nach wenigen TYPO3 Extbase Erweiterungen stand wohl schon jeder Entwickler einmal vor dem Problem, dass die Änderungen die er an einem Model in seinem Actioncontroller vornimmt, einfach nicht persistiert werden.
Normalerweise persistiert man ein aktualisiertes bzw. verändertes Model ja, indem man beim entsprechenden Repository die Methode update() aufruft und dieser das veränderte Objekt übergibt.

Beispiel in irgendeiner Action eines Extbase Controllers:

# Finde News mit ID 5
$news = $this->newsRepository->findByUid(5);

# Aktualisiere den Titel
$news->setTitle("Der neue Titel");

# Update auf das Repository anwenden
$this->newsRepository->update($news);

Danach könnte jetzt noch irgendein Assign oder ein Redirect an eine andere Action stattfinden und normalerweise würde der Titel zum Beispiel durch ein Redirect auch tatsächlich in der Datenbank gespeichert werden.

ABER DAS FUNKTIONIERT VERDAMMT NOCHMAL MANCHMAL EINFACH NICHT IMMER?!?11

Zum Beispiel wenn einfach keine Weiterleitung erfolgt wie zum Beispiel in einer AJAX Action die auch nicht an ein Fluid Template assign’ed sondern einfach nur ein return zurückgibt oder in irgendeiner Funktion innerhalb eines Models.

Und verdammt nochmal ja, dann nimmt man halt einfach mal den Vorschlaghammer und persistiert das ganze mit dem PersistenceManager.

# Finde News mit ID 5
$news = $this->newsRepository->findByUid(5);

# Aktualisiere den Titel
$news->setTitle("Der neue Titel");

# Update auf das Repository anwenden
$this->newsRepository->update($news);

# Den Vorschlaghammer instanzieren / aus der Kiste kramen
$persistenceManager = $this->objectManager->get("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager");

# Mit dem Vorschlaghammer in die Datenbank speichern / Nägel mit Köpfen machen
$persistenceManager->persistAll();

Problem gelöst .

5 Kommentare

  • Genial 😉

    Danke für den Tipp: Der gute alte Vorschlaghammer richtet doch fast alles im Notfall…

  • Als ich garade das Problem hatte hab ich auch in Capslock geflucht ;-).
    Vielen Dank für die Lösung

  • Vielen Dank für den Beitrag! Dachte schon ich hätte irgendwas groß falsch gemacht. 🙂

  • Geht tatsächlich 😉 Danke dafür – aber wir suchen auch noch nach einer schöneren Lösung 😉

  • Automatische Persistierung erfolgt meines Wissens nur, wenn der Request per POST (oder PUT) erfolgte, nicht jedoch bei GET-Requests. Das ist eine Frage der Sicherheit. Daher erscheint es häufig so, als ob die Persistierung willkürlich manchmal nicht erfolgt. Bei GET-Requests muss man dann mit dem PersistenceManager selbst persistieren.

Schreibe einen Kommentar zu Martin Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.