Parameter in Link obwohl nicht sie nicht übergeben wurden

  • eisstern eisstern
    R2-D2
    0 x
    112 Beiträge
    0 Hilfreiche Beiträge
    06. 03. 2013, 15:38

    Hallo,

    Das Problem besteht darin, dass mir nicht vorhandene Parameter in die URL geschmuggelt werden welche dafür sorgen, dass ein nicht vorhandenes Objekt gebaut werden soll und der Controller gibt die entsprechende Fehlermeldung aus. Leider muss ich für die Erklärung weiter ausholen.

    Die Extension besteht aus einer Übersichtsliste von Referenzen die über ein Formular mit 2 Parametern gefiltert werden muss. Dies geschieht mit dem Model Filter das einen zusätzlichen 3 Parameter enthält der hier im Formular aber nicht verwendet wird aber im Model vorhanden ist (siehe Erklärung später) immer über ein Post und läuft ohne Probleme.
    Den Detailseiten wird der Filter mit <f:link.action arguments="{filter: filter}}" /> übergeben, weil dort "weiter" und "zurück" Buttons für die Navigation innerhalb der Filterung verwendet werden. Hier gibt es keine Probleme den Filter zu übergeben und zu verwenden.
    Nun gibt es aber einen weiteren Link auf den Detailseiten der zurück auf die Listenansicht verweist, aber einen weiteren Filter für die entsprechende Firma setzt (und die anderen 2 Parameter auf default belässt). Da ich zwei verschiedene Filter verwende initialisiere ich den Firmenfilter über $filterFachbetrieb = new Filter() und setze die Firmenid. Die anderen 2 Parameter sind über Defaultwerte automatisch gesetzt.
    Wenn ich diesen Filter jetzt allerdings an einen Link übergebe, habe ich dort zusätzliche Parameter die ich nicht brauche bzw. mir die Ausgabe auf der Übersichtsseite zerstören, weil nun eine leere uid übergeben wird, zu der natürlich kein Objekt gebaut werden kann.

    Das ganze hier einmal mit Code:

    Filter Model

    1. <?php
    2.  
    3. class Tx_WeruReferenzen_Domain_Model_Filter extends Tx_Extbase_DomainObject_AbstractValueObject {
    4.  
    5. /**
    6. * @var integer
    7. */
    8. protected $objektArt = -1;
    9.  
    10. /**
    11. * @var integer
    12. */
    13. protected $objektArbeitsTyp = -1;
    14.  
    15. /**
    16. * @var integer
    17. */
    18. protected $fachbetriebId = 0;
    19.  
    20.  
    21.  
    22. public function getObjektArt() {
    23. return $this->objektArt;
    24. }
    25.  
    26. public function setObjektArt($objektArt) {
    27. $this->objektArt = $objektArt;
    28. }
    29.  
    30. public function getObjektArbeitsTyp() {
    31. return $this->objektArbeitsTyp;
    32. }
    33.  
    34. public function setObjektArbeitsTyp($objektArbeitsTyp) {
    35. $this->objektArbeitsTyp = $objektArbeitsTyp;
    36. }
    37.  
    38. public function getFachbetriebId() {
    39. return $this->fachbetriebId;
    40. }
    41.  
    42. public function setFachbetriebId($fachbetriebId) {
    43. $this->fachbetriebId = $fachbetriebId;
    44. }
    45. }
    46. ?>

    Controller mit ‹bersichtsseite (list) und Detailseite (preview)

    1. <?php
    2. /**
    3. * action list
    4. *
    5. * @param Tx_WeruReferenzen_Domain_Model_Filter $filter
    6. * @dontverifyrequesthash
    7. *
    8. * @return void
    9. */
    10. public function listAction(Tx_WeruReferenzen_Domain_Model_Filter $filter = null) {
    11. $this->response->addAdditionalHeaderData('<script type="text/javascript" src="typo3conf/ext/weru_referenzen/Resources/Public/Javascripts/referenzen.js"></script>');
    12.  
    13. // search the results
    14. if($filter != null){
    15. //echo 'YES';
    16. $referenzs = $this->referenzRepository->findFiltered($filter);
    17. }
    18. else{
    19.  
    20. //echo 'NO';
    21. $filter = new Tx_WeruReferenzen_Domain_Model_Filter();
    22. $referenzs = $this->referenzRepository->findAll();
    23. }
    24.  
    25. // select field options
    26. $gebaeudeartenObjekt = $this->objektArtRepository->findAll();
    27. $gebaeudearten = array_merge(
    28. array(-1=>Tx_Extbase_Utility_Localization::translate('list.filter.all', 'weru_referenzen')),
    29. $gebaeudeartenObjekt->toArray()
    30. );
    31.  
    32. $arbeitsTyp = array(
    33. -1=>Tx_Extbase_Utility_Localization::translate('list.filter.all', 'weru_referenzen'),
    34. 0=>Tx_Extbase_Utility_Localization::translate('list.objektArbeitsTyp.0', 'weru_referenzen'),
    35. 1=>Tx_Extbase_Utility_Localization::translate('list.objektArbeitsTyp.1', 'weru_referenzen')
    36. );
    37.  
    38. $this->view->assign('filter', $filter);
    39. $this->view->assign('referenzs', $referenzs);
    40. $this->view->assign('gebaeudearten', $gebaeudearten);
    41. $this->view->assign('arbeitsTyp', $arbeitsTyp);
    42.  
    43. }
    44.  
    45. /**
    46. * action preview
    47. *
    48. * @param Tx_WeruReferenzen_Domain_Model_Referenz $referenz
    49. * @param Tx_WeruReferenzen_Domain_Model_Filter $filter
    50. * @dontverifyrequesthash
    51. * @return void
    52. */
    53. public function previewAction(Tx_WeruReferenzen_Domain_Model_Referenz $referenz, Tx_WeruReferenzen_Domain_Model_Filter $filter = null) {
    54.  
    55. $this->response->addAdditionalHeaderData('<script type="text/javascript" src="typo3conf/ext/weru_referenzen/Resources/Public/Javascripts/galleria-1.2.9.min.js"></script>');
    56. $this->response->addAdditionalHeaderData('<script type="text/javascript" src="typo3conf/ext/weru_referenzen/Resources/Public/Javascripts/referenzen.js"></script>');
    57.  
    58. $next = $this->referenzRepository->getNext($referenz);
    59. $prev = $this->referenzRepository->getPrev($referenz);
    60.  
    61. if($filter == null){
    62. $filter = new Tx_WeruReferenzen_Domain_Model_Filter();
    63. }
    64.  
    65. $filterBetrieb = new Tx_WeruReferenzen_Domain_Model_Filter();
    66. $filterBetrieb->setFachbetriebId($referenz->getFachbetrieb()->getUid());
    67.  
    68.  
    69. $this->view->assign('filter', $filter);
    70. $this->view->assign('filterBetrieb', $filterBetrieb);
    71. $this->view->assign('referenz', $referenz);
    72. $this->view->assign('next', $next);
    73. $this->view->assign('prev', $prev);
    74. }
    75. ?>

    Die Detailseite

    1. <f:link.action action="list" pageUid="{settings.listPid}" arguments="{filter: filterBetrieb}" class="internal-link">Nur Referenzen dieses Fachbetriebs</f:link.action>

    Der genereirte Link enthält zusätzlich zu den Filter Paramatern objektArt=-1, objektArbeitsTyp=-1 und fachbetriebId=14 auf einmal filter[uid]= und filter[pid]= . Dadurch versucht die Listenübersicht das Filterobjekt anhand der uid wieder zusammen zu bauen was natürlich fehlschlägt. Aber selbst wenn ich das Filterobjekt debugge, enthält es diese zwei uid und pid Parameter nicht. Das Model ist auch ein ValueObjekt und keine Entity. Ich habe keine Ahnung woher die Parameter kommen oder wie ich sie deaktiviere.

    Ich weiß das der Sachverhalt etwas schwierig nachzuvollziehen ist. Wenn noch weitere Infos gebraucht werden, poste ich sie natürlich gerne.

    Danke im voraus :)


  • 1
  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    06. 03. 2013, 17:29

    Hallo,

    das liegt daran weil Du als Argument ein ganzes ValueObject übergibst. Du könntest versuchen, ein Array mit den wenigen nötigen Parametern zu bilden und erst dann weiter zu reichen.

    VG,
    LuP

  • 1