Einfaches redirect nach create funktioniert nicht ... ?

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2012, 10:06

    Hallo,

    möchte gern nach dem Anlegen einer neuen Nachricht eine Weiterleitung auf die showAction. Es kommt jedoch folgender Fehler:

    [color=red]#1217839467: Could not ultimately dispatch the request after 101 iterations. Most probably, a @dontvalidate annotation is missing on re-displaying a form with validation errors.[/color]

    New.html

    1. <f:form method="Post" controller="Posts" action="create" name="newPosts" object="{newPosts}">
    2.  
    3.  
    4. <label for="postTitle">Titel</label>
    5. <f:form.textfield name="postTitle" property="postTitle" /><br>
    6.  
    7. <label for="forumsId">ForumsID</label>
    8. <f:form.textfield name="forumsId" property="forumsId" value="{forum.uid}"/><br>
    9.  
    10. <label for="forumsId">Text</label>
    11. <f:form.textarea name="postText" property="postText" rows="20" cols="46" /><br>
    12.  
    13. <f:form.submit value="Speichern" />
    14. </f:form>

    PostsController.php

    1. /**
    2. * action show
    3. *
    4. * @param Tx_MyForum_Domain_Model_Posts $posts
    5. * @return void
    6. */
    7. public function showAction(Tx_MyForum_Domain_Model_Forum $forum, Tx_MyForum_Domain_Model_Posts $posts) {
    8. $this->view->assign('posts', $posts);
    9. $this->view->assign('forum', $forum);
    10. }
    11.  
    12. /**
    13. * action new
    14. *
    15. * @param Tx_MyForum_Domain_Model_Posts $newPosts
    16. * @dontvalidate $newPosts
    17. * @return void
    18. */
    19. public function newAction(Tx_MyForum_Domain_Model_Forum $forum, Tx_MyForum_Domain_Model_Posts $newPosts = NULL) {
    20. $this->view->assign('newPosts', $newPosts);
    21. $this->view->assign('forum', $forum);
    22. }
    23.  
    24. /**
    25. * action create
    26. *
    27. * @param Tx_MyForum_Domain_Model_Posts $newPosts
    28. * @return void
    29. */
    30.  
    31. public function createAction(Tx_MyForum_Domain_Model_Posts $newPosts, Tx_MyForum_Domain_Model_Forum $forum) {
    32. $this->postsRepository->add($newPosts);
    33. $this->flashMessageContainer->add('Your new Posts was created.');
    34. #$this->redirect('list','Forum');
    35. $this->redirect('show', NULL, NULL, array('posts' => $newPosts));
    36. #$this->forward('show', 'Posts', NULL, array('posts' => $newPosts));
    37. }

    Gruss
    mimaxx


  • 1
  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2012, 14:57

    Hallo,

    1. /**
    2.  * action show
    3.  *
    4.  * @param Tx_MyForum_Domain_Model_Posts $posts
    5.  * @dontvalidate $posts
    6.  * @return void
    7.  */
    8. public function showAction(Tx_MyForum_Domain_Model_Forum $forum, Tx_MyForum_Domain_Model_Posts $posts) {
    9. $this->view->assign('posts', $posts);
    10. $this->view->assign('forum', $forum);
    11. }

    VG,
    LuP

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2012, 15:58

    Hallo LuP,

    erstmal Danke für die schnelle Antwort, aber das brachte noch nicht den gewünschten Erfolg.

    Habe * @dontvalidate $newPosts in die showAction hinzugefügt. Cache geleert aber immer noch der gleiche Fehler.

    Gibt es noch andere Dinge die ich beachten muss? Ist der Aufruf mit

    1. $this->redirect('show', NULL, NULL, array('posts' => $newPosts));

    denn korrekt?

    Gruss
    mimaxx

  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2012, 19:00

    sorry, habe vorhin wegen redirect nicht gut aufgepasst. Ein anderer Ansatz:

    1. /**
    2.  * show action
    3.  *
    4.  * @return void
    5.  */
    6. public function showAction() {
    7. $mappingArr = array(
    8. 'posts' => $this->postsRepository,
    9. 'forum' => $this->forumRepository
    10. );
    11.  
    12. foreach($mappingArr as $name => $repo) {
    13. if($this->request->hasArgument($name)) $this->view->assign($name, $repo->findByUid($this->request->getArgument($name)));
    14. }
    15. }

    VG,
    LuP

  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2012, 19:30

    mein vorheriger Ansatz dürfte auch noch nicht funktionieren. Nimm forward statt redirect:

    1. /**
    2.  * show action
    3.  *
    4.  * @return void
    5.  */
    6. public function showAction() {
    7. $mappingArr = array('posts', 'forum');
    8.  
    9. foreach($mappingArr as $name) {
    10. if($this->request->hasArgument($name)) $this->view->assign($name, $this->request->getArgument($name));
    11. }
    12. }
    13.  
    14. /**
    15.  * action create
    16.  *
    17.  * @param Tx_MyForum_Domain_Model_Posts $newPosts
    18.  * @return void
    19.  */
    20. public function createAction(Tx_MyForum_Domain_Model_Posts $newPosts, Tx_MyForum_Domain_Model_Forum $forum) {
    21. $this->postsRepository->add($newPosts);
    22. $this->flashMessageContainer->add('Your new Posts was created.');
    23. $this->forward('show', NULL, NULL, array('posts' => $newPosts));
    24. }

    VG,
    LuP

  • 1