Aus createAction auf editAction weiterleiten klappt nicht?

  • typonewbe typonewbe
    Sternenflotten-Admiral
    0 x
    188 Beiträge
    3 Hilfreiche Beiträge
    24. 01. 2011, 12:55

    Hallo,

    ich möchte gern nach anlegen eines neuen Benutzers auf den Editview weiterleiten was ja im Prinzip nicht schwer sein sollte.

    1. $this->redirect('edit','FrontendUser',Null,array('frontendUser' => $newFrontendUser));

    Das Problem wenn ich das Objekt übergebe kommt dieser Fehler
    Could not serialize Domain Object Tx_MyExt_Domain_Model_FrontendUser. It is neither an Entity with identity properties set, nor a Value Object

    Wenn ich jetzt aber das Objekt speichere und dann den Datensatz wieder einlese mit uid.

    1. $frontendUser = $this->frontendUserRepository->findByUsername((string)$newFrontendUser->getUsername());
    2. $this->redirect('edit','FrontendUser',Null,array('frontendUser' => $frontendUser));

    Kommt folgende Fehlermeldung:

    Tx_MyExt_Controller_FrontendUserController->editAction(). Error: Required property 'frontendUser' does not exist.

    Es kann doch nicht so schwer sein eine uid zu übergeben oder denke ich gerade falsch?

    Danke schonmal für die Mühe

    Grüße typonewbe

  • Hilfreichster Beitrag

  • BlackPixel BlackPixe...
    Sternenflotten-Admiral
    1 x
    230 Beiträge
    3 Hilfreiche Beiträge
    05. 10. 2013, 15:04 - Hilfreichster Beitrag

    Entweder muss forward genommen werden, oder das Objekt muss vor dem redirect persistiert werden.

    $this->forward kann Objekte weitergeben die noch nicht in der Datenbank stehen und somit keinen persistenten uid haben.

    $this->redirect mach nichts anderes als einen meta refresh. Da das programm mit $this->redirect beendet wird und das Browserfenster mit dem Meta Refresh neu geladen wird kann natürlich nicht das komplette Objekt übergeben werden. Es wird in dem Fall nur die uid übergeben, die es aber noch nicht gibt, da das Objekt noch nicht gespeichert wurde.

    Wenn du von Create auf Edit weiterleitest empfiehlt es sich wie schon geschrieben das Objekt mit dem PerstitenceManager in die Datenbank zu schreiben und $this->redirect zu nutzen. Dann wird in der weitergeleiteten Action bei einem neu laden des Browsers (F5) das Formular nicht nochmal abgeschickt und das Objekt nicht nochmal in die DB gespeichert. Denn bei $this->forward bleibt die URL gleich und das abgesendete Formular kann mit F5 nochmal abgesendet werden.

    TYPO3 Slider Revolution: https://www.rutschmann.biz/extensions/typo3-slider-revolution/
    TYPO3 Layerslider Extension: http://www.rutschmann.biz/extensions/typo3-layerslider/
    TYPO3 Responsive Flipbook Extension: http://www.rutschmann.biz/extensions/typo3-responsive-flipbook/
    TYPO3 PayPal Download Checkout: http://www.rutschmann.biz/extensions/typo3-paypal-download/

    http://www.rutschmann.biz/
    ----------------------------------------------------
    Extbase, Fluid, HTML & CSS Development


  • 1
  • typonewbe typonewbe
    Sternenflotten-Admiral
    1 x
    188 Beiträge
    3 Hilfreiche Beiträge
    24. 01. 2011, 18:17

    Hallo,

    habs gefunden die Lösung gibts [url="http://www.kaktusteam.de/index.php?id=mimis_blog&tx_t3blog_pi1[blogList][showUid]=75&tx_t3blog_pi1[blogList][year]=2009&tx_t3blog_pi1[blogList][month]=12&tx_t3blog_pi1[blogList][day]=22&cHash=a2f3c4e8b0b3a0048554d55592a7a9ac"]hier[/url].

    Die Kurzfassung:

    In der createAction muss folgendes hinzugefügt werden.

    1. public function createAction(Tx_MyExt_Domain_Model_FrontendUser $newFrontendUser) {
    2. ...
    3. $this->flashMessageContainer->add('Your new FrontendUser '.$newFrontendUser->getUsername().'was created.');
    4. //Jetzt der wichtige Teil
    5. $persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
    6. /* @var $persistenceManager Tx_Extbase_Persistence_Manager */
    7. $persistenceManager->persistAll();
    8. //Und dann
    9. $this->redirect('edit','FrontendUser',Null,array('frontendUser' => $newFrontendUser));
    10. }

    Das wars

    Gruß typonewbe

  • tobla tobla
    R2-D2
    0 x
    100 Beiträge
    1 Hilfreiche Beiträge
    20. 10. 2011, 17:04

    Ich steh leider vor dem gleichen Problem.

    In meiner createAction überprüfe ich noch einige Werte (Koordinaten) auf ihre geographische Richtigkeit (Land, Adresszugehörigkeit). Sind die Koordinaten inkorrekt leite ich um, zurück zur newAction:

    1. public function createAction(MyExt_Domain_Model_Entry $newEntry) {
    2. if(do my check) { save entry }
    3. else {
    4. $this->redirect('new',NULL,NULL,array('entry' => $newEntry));
    5. }
    6. }

    Leider löst bei mir der PersistencManager das Problem nicht. Hat mir jemand einen Tipp, was ich falsche mache? Ich hab's versucht mit:

    1. ...
    2. } else {
    3. $persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
    4. $persistenceManager->persistAll();
    5.  
    6. $this->redirect('new',NULL,NULL,array('entry' => $newEntry));
    7. }

  • bwaldbrunner bwaldbrun...
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    04. 10. 2013, 10:06

    Ich weiß, der Thread ist jetzt schon veraltet, aber ich hatte das gleiche Problem und bin durch Herumprobieren auf die Lösung gekommen:

    Statt redirect muss die Methode forward verwendet werden.

    1. $this->forward('new',NULL,NULL,array('entry' => $newEntry));

    Vielleicht hilft es ja jemandem.

  • BlackPixel BlackPixe...
    Sternenflotten-Admiral
    1 x
    230 Beiträge
    3 Hilfreiche Beiträge
    05. 10. 2013, 15:04

    Entweder muss forward genommen werden, oder das Objekt muss vor dem redirect persistiert werden.

    $this->forward kann Objekte weitergeben die noch nicht in der Datenbank stehen und somit keinen persistenten uid haben.

    $this->redirect mach nichts anderes als einen meta refresh. Da das programm mit $this->redirect beendet wird und das Browserfenster mit dem Meta Refresh neu geladen wird kann natürlich nicht das komplette Objekt übergeben werden. Es wird in dem Fall nur die uid übergeben, die es aber noch nicht gibt, da das Objekt noch nicht gespeichert wurde.

    Wenn du von Create auf Edit weiterleitest empfiehlt es sich wie schon geschrieben das Objekt mit dem PerstitenceManager in die Datenbank zu schreiben und $this->redirect zu nutzen. Dann wird in der weitergeleiteten Action bei einem neu laden des Browsers (F5) das Formular nicht nochmal abgeschickt und das Objekt nicht nochmal in die DB gespeichert. Denn bei $this->forward bleibt die URL gleich und das abgesendete Formular kann mit F5 nochmal abgesendet werden.

    TYPO3 Slider Revolution: https://www.rutschmann.biz/extensions/typo3-slider-revolution/
    TYPO3 Layerslider Extension: http://www.rutschmann.biz/extensions/typo3-layerslider/
    TYPO3 Responsive Flipbook Extension: http://www.rutschmann.biz/extensions/typo3-responsive-flipbook/
    TYPO3 PayPal Download Checkout: http://www.rutschmann.biz/extensions/typo3-paypal-download/

    http://www.rutschmann.biz/
    ----------------------------------------------------
    Extbase, Fluid, HTML & CSS Development

  • 1