2016-04-04 9 views
3

Wenn Extbase der „Show“ Aktion mit:In Extbase 6.2, verwenden Sie keine uid für Liste Seite

<f:link.action action="show" arguments="{event : event}"> 

hätte ich gesagt aussehen mag Veranstaltung durch eine spezielle Spalte (‚CUSTOMID‘). Die tatsächliche TYPO3-UID sollte nicht in der URL (mit oder ohne RealURL) erscheinen.

Der Grund ist, dass die Daten importiert wurden, und die "echte" UID ist "customId".

Es gibt immer @ Biesior Ansatz f:link.pagehttps://stackoverflow.com/a/26145125/160968 - aber ich dachte, ich würde es mit dem offiziellen Weg versuchen.

(wie) ist es möglich, das in extbase/fluid zu tun?

+1

Meine Antwort dort ist eher für die Vermeidung von Controller und Aktion Teile in der URL, nur um den Typ des Parameters in Show-Aktion (außer Modell; s-Objekt) zu erklären @ Lorenz hat eine bessere Lösung. – biesior

Antwort

3

Dies ist möglich. Angenommen, Ihr Modell Event hat eine Eigenschaft customId. So generieren Sie Ihren Link wie folgt:

<f:link.action action="show" arguments="{event : event.customId}">

Der Link erzeugt eine querystring wie dieses:

?tx_myext[event]=9999

Die showaction von dem Extension Builder generiert erwartet, dass die UID des Ereignisses ist bestanden. Die PropertyMapper holt dann das Objekt automatisch und ordnet sich die Ansicht:

/** 
* action show 
* 
* @param \Your\Extension\Domain\Model\Event $event 
* @return void 
*/ 
public function showAction(\Your\Extension\Domain\Model\Event $event) { 
    $this->view->assign('event', $event); 
} 

Aber in Ihrem Fall können Sie das Objekt durch UID nicht holen, weil Sie die CUSTOMID geben. So müssen Sie das Objekt holen Sie sich:

/** 
* action show 
* 
* @param integer $event 
* @return void 
*/ 
public function showAction($event) { 
    $event = $this->eventRepository->findOneByCustomId($event); 
    $this->view->assign('event', $event); 
} 

Die Anmerkung @param integer $event sagt TYPO3, dass der Parameter ist „nur“ eine ganze Zahl. Sie rufen dann die magische Methode findOneByCustomId von Ihrem eventRepository. findOne zeigt an, dass Sie genau ein Event Objekt zurück (und nicht ein QueryResult) möchten, während das ByCustomId eine vorhandene Eigenschaft Ihres Event Modells abfragt.

+0

jetzt bin ich wieder zerrissen. da diese Lösung genauso gut funktioniert wie biesors "clean-url" -Lösung - was ist das Argument, um wieder bei f: link.action anstatt bei f: link.page zu bleiben (wenn ich nur eine Show- und Listenaktion habe)? – Urs

+0

Dies hat nichts mit link.action vs. link.page zu tun. Es zeigt lediglich eine Möglichkeit, ein Objekt für eine einzelne Ansicht anzufordern, ohne die UID zu verwenden oder freizugeben. Sie können immer noch mit dem Ansatz "saubere URL" gehen. – lorenz

+0

Ja, ich war mir einfach nicht sicher was besser war. Ich denke, es ist nur relevant, wenn Sie mehr als List/Show-Aktionen haben. Vielen Dank! – Urs

Verwandte Themen