[TYPO3-german] Re: ViewHelper in Controller rendern

Elmar Hinz t3elmar at googlemail.com
Fri Apr 26 14:47:44 CEST 2013


Hallo Stephan,

> Ich verbinde diesen ifViewHelper mit einem linkViewHelper der mir eine Seite verlinkt, diesen linkViewHelper mit einem zweiten und einem Stringvergleich und möchte prüfen, ob der erzeugte Link Cross-Domian wird oder nicht. 

Das ist so komplex, daß es sich in Worten schwer formulieren läßt. Und diese Komplexität soll nun der Entwickler des Templates verstehen, der ja eigentlich kein Programmierer, sondern ein Webdesigner ist? 

Für mich gehört das einfach nicht in das Template. Das Ergebnis einer so komplexen Bedingung sollte berechnet sein, wenn die Daten an dem Template übergeben werden. Elementar im Template ist für mich eine Each-Schleife und eine If-Abfrage. Alles andere kann man zuvor berechnet sein. 

Oder hinter einer Properperty verborgen, die tatsächlich ein Funktion ist. Dazu müssen die Daten ein Objekt, kein Array sein. Das könnte z.B. als Erweiterung oder Decorator des DomainObjects implementiert werden. Damit bekommt man eine saubere Trennung von Templates, Logik und Tranformationen und erspart dem Template Entwickler den Umweg über ViewHelper.

Sich erst im View zu überlegen, was man berechnen muß, das ist Prototyping. Es ist manchmal ganz nützlich für den Erstentwurf. Zu wartbarem Code führt dieses Durcheinander aber nicht.Ich würde es eher als Spielzeug bezeichnen für Leute, die einmal ein bisschen Programmierer spielen wollen,aber von Software-Architiktur nichts verstehen.

> * Der (action.)linkViewHelper braucht ein Plugin, damit die NULL-Parameter definiert sind (controller und extension)

Ja, der Link ist ein sehr spannedes Thema.

> Was sicher jeder schon mal gemacht hat und was bei der Betrachtung auch so trivial ist dass es überhaupt nicht auf fällt: Es würde von uns ja nie einer auf die Idee kommen, den linkViewHelper im PHP-Code zu instanziieren, nur um einen Link in der Hand zu haben, etwa für einen Header-Redirect.

Nein nicht den linkViewHelper. Da gibt es im Controller nämlich noch den LinkBuilder, den man direkt ansprechen kann.  Aber dieser Linkbuilder hängt ganz genauso an dem vollem Kontext, wie von Dir beschrieben.

Es kommt aber vor, daß man außerhalb des Controller Kontextes einen Link erzeugen will, der in diesen Kontext verlinkt.Damit das zukunftssicher funktioniert, will man den Link mit dem LinkBuilder erzeugen, kann den aber nicht so einfachinstantieren. Man muß erst wieder einen temporären Controller-Kontext erzeugen, bloß um einen kleinen Link korrekt  zu erzeugen.

Möglicherweise ist das inzwischen besser gelöst.

> Und diese Frage hat offensichtlich überhaupt nichts mit ExtBase am Hut sondern steht schon grob fünf Jahre länger monatlich auf sämtlichen TYPO3-Listen.

Vielleicht doch noch nicht besser gelöst. ;)

Das hat aber doch etwas mit ExtBase zu tun. Zu den von Dir beschriebenen Issues, addiert ExtBase einen ganzen Haufen neue dazu.  

Der zentrale Zugriff ist ja eigentlich die typolink-Funktion. Die hat ihre Abhängigkeiten. Der LinkBuilder von Extbase, erzeugt aber einen ganzen Baum zusätzlicher Abhängigkeiten, obwohl er die Funktion wahrscheinlich nur als Objekt wrapped.

Wenn Du dann noch einen View erzeugst, um über den ViewHelper auf den Link zu zugreifen, dann wird das Ganze so absurd, daß man es fast als Parodie auf TYPO3 verwursten könnte. Du reist über Australien, um Deinen Nachbarn zu besuchen.

Schon das Konzept der View-Helper geht für mich in die falsche Richtung. Wenn die View-Helper dann noch als Service für andere Bereiche dienen sollen, dann wickelt der Hund sich selbt mit der Leine um den Baum.

Viele Funktionen müßten anders, z.B. als allgemeiner Service angelegt sein, von wo sich auch die View-Helper bedienen können. Dann könnte man dazu vielleicht sogar einen halbwegs generischen Ansatz finden.

Elmar



More information about the TYPO3-german mailing list