Zum Inhalt springen

f:link.action - Werteübergabe mit "arguments"

Erstellt am 9. Juni 2013 · 2 Antworten · letzte Antwort am 9. Juni 2013

Tags: Fluid, ViewHelper, Frage

tvnetzwerk ·

Hallo, ich versuche seit einiger Zeit das Prinzip zu verstehen, das hinter dem Attribut "arguments" steht.

Hier folgendes Beispiel, das Model heißt "stile":

<f:for each="{stiles}" as="stile">                 

    <p>start</p>
    <f:link.action action="show" arguments="{stile : stile}">
        Do it!
    </f:link.action>

</f:for>

Das ist ja sozusagen die Standard-übergabe der Properties

Bei

<f:debug>{stile}</f:debug>

erhalte ich in der Detailansicht sehr schön alle Eigenschaften angezeigt. Super!

Jetzt will ich aber zusätzlich einen Sting rüberschicken. Also probiere ich einmal das:

<f:for each="{stiles}" as="stile">                 

    <p>start</p>
    <f:link.action action="show" arguments="{stile : stile, key : 'wert'}">
        Do it!
    </f:link.action>

</f:for>

Laut dem Buch "zukunftsichere TYPO3-Extensions" von Jochen Rau/Sebastian Kurfürst ist es ja ausdrücklich möglich, mittels eines Schlüsselworts (key) Stings zu übergeben.

Jedoch bei

<f:debug>{key}</f:debug>

wird immer nur "Null" ausgespuckt. Das gleiche passiert übrigens auch wenn ich versuche, Zahlen zu übergeben. Hmm!

Übrigens ändert auch ein Eintag im Controller nichts:

/**
* action show
*
* @param \TYPO3\Extension\Domain\Model\Stile $stile
* @return void
*/
public function showAction(\TYPO3\Extension\Domain\Model\Stile $stile) {
	$this->view->assign('stile', $stile);
        $this->request->getArgument('key');
}

Der Parameter bleibt immer "NULL"

Was mache ich denn nur falsch?

Herzlichen Dank und beste Grüße
Carsten

Unbekannter Benutzer ·

Im Grunde hast Du soweit schon alles richtig verstanden.

In der Argumentszuweisung (das ist eine Key-Value-Map oder auch Array genannt) hast du links immer die Bezeichnung (Key) und rechts den Wert (Value), d.h. du weißt dem Key "stile" den Inhalt der Fluidvariablen "stile" zu, "key" (das kannst du auch beliebig anders nennen) bekommt den Wert "wert".

Um das Argument nun benutzen zu können müssen zwei Dinge erfüllt sein.
Du liest das Argument in deiner Action aus und gibst es an den View weiter.

public function showAction(\TYPO3\Extension\Domain\Model\Stile $stile, $key)

Das wäre eine Variante. Die andere ist die, die Du schon probiert hast, aber leider nicht vollständig:

$this->request->getArgument('key');

Das gibt dir den Wert von "key" zurück du musst ihn nun noch nehmen:

$key = $this->request->getArgument('key');

In beiden Fällen musst du dann $key noch dem View übergeben:

$this->view->assign('key', $key);
tvnetzwerk ·

Super, das geht:-)

Nochmal zusammengefasst:

List-Template

<f:for each="{stiles}" as="stile">                 

    <p>start</p>
    <f:link.action action="show" arguments="{stile : stile, key : 'wert'}">
        Do it!
    </f:link.action>
</f:for>

Controller Stile.php

/**
 * action show
 *
 * @param \TYPO3\Extension\Domain\Model\Stile $stile
 * @return void
 */
public function showAction(\TYPO3\Lichtzeichen\Domain\Model\Stile $stile) {
        $this->view->assign('stile', $stile);
        $key = $this->request->getArgument('key');
        $this->view->assign('key', $key);
}