[Frage] Extbase: Wie können versteckte Datensätze durch FE Benutzer bearbeitet werden?

  • menak menak
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    09. 05. 2014, 08:56

    Hallo allerseits,
    in einem Extbase Plugin unter Typo3 6.2 sollen FE User versteckte Datensätze bearbeiten können, konkret sollen Sie Veranstaltungsdatensätze bearbeiten können.
    Da diese nicht immer gleich freigeschaltet werden sollen, sollen sie auch versteckbar sein.

    Solange ein Datensatz sichtbar ist kann der Datensatz editiert werden, kein Problem. Es kann auch versteckt werden, das Speichern funktioniert einwandfrei. Danach ist der Datensatz aber nicht wieder editierbar.

    Die versteckten Datensätze werden dank der nachfolgenden Anweisung in der find Methode im Repository auch brav weiter gelistet:

    1. $query->getQuerySettings()->setIgnoreEnableFields(TRUE);
    2. $query->getQuerySettings()->setEnableFieldsToBeIgnored(array('disabled'));

    In der editAction allerdings wird überhaupt keine Repository Methode aufgerufen. D.h. nicht explizit. Da schon mal die Frage: Welche Methode des Respository wird da aufgerufen?

    Wenn ein FE User eine editAction aufruft erscheint die Exception:

    [b]#1297759968: Exception while property mapping at property path "":Object with identity "4" not found.[/b]

    Wobei dann die "4" die UID des Datensatzes ist.

    Wie kann ich auch in der editAction versteckte Datensätze zum Bearbeiten laden? Natürlich kann ich ein eigenes Feld zum Verstecken anlegen, allerdings scheint mir das am Sinn des Ganzen vorbeizugehen.

    Vielen Dank im Voraus!

    Grüße
    Matthew

    Tags: Extbase

  • 1
  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    21. 05. 2014, 10:09

    Falls du diese Anweisung noch nicht in den Default Query Settings und nur in einer Finder Methode deines Repositories gesetzt haben solltest, würde ich das mal versuchen:
    http://forge.typo3.org/projects/typo3v4-mvc/wiki/Default_Orderings_and_Query_Settings_in_Repository

    Wenn auch das nicht hilft, kannst du die automatische Request Parameter zu Objekt Konvertierung eben nicht nutzen und musst die Parameter-Typen deiner Editier-Controller ändern auf simples Array ändern und das Objekt dann selber finden und modifizieren, was ja auch kein Beinbruch wäre.

    http://www.aemka.de/

  • menak menak
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    21. 05. 2014, 10:28

    Danke für deine Antwort, so hatte ich das mittlerweile auch umgesetzt. Schade, ich dachte es gäbe eine Möglichkeit mit Objekten zu realisieren.

  • froemken froemken
    Jedi-Ratsmitglied
    0 x
    811 Beiträge
    1 Hilfreiche Beiträge
    10. 06. 2014, 14:08

    Hallo Ihr beiden,

    2 Möglichkeiten:

    1.) Beim Aufruf der EditAction steht ja auch nur ein Integer in der URL, also kannst Du die editAction auch so schreiben:

    /**
    * @param integer $car
    */
    public function editAction($car) {
    $car = $this->carRepository->myMethodWithIgnoreDisabledFields($car);
    ...
    }

    Auf diese Weise hast Du auch wieder ein Objekt mit dem Du weiter arbeiten kannst.

    Die zweite Lösung lässt bei einigen Extbase-Programmierern die Augen verdrehen :-) Aber hey...es geht:

    2.) Erstell eine neue Eigenschaft vom Typ Session in Deinem Controller. Das ist der temporäre Cache für die Domainobjekte.

    1. /**
    2.  * @var \TYPO3\CMS\Extbase\Persistence\Generic\Session
    3.  * @inject
    4.  */
    5. protected $session;

    Erstell eine initializeEditAction():

    1. public function initializeEditAction() {
    2. $carArg = $this->request->getArgument('car');
    3. $car = $this->carRepository->findHiddenEntryByUid($carArg);
    4. $this->session->registerObject($car, $car->getUid());
    5. }

    Jetzt wo Dein Auto in der Session registriert ist, kannst Du Deine editAction wie gehabt aufrufen lassen und sogar die Validatoren laufen über dieses versteckte Objekt.

    Stefan

  • 1