2016-12-12 2 views
0

Ich habe eine Route, die :lang hier eine Sprache gibt (Zend Framework 3):Navigation nicht Variablenwert mit Route

'contact' => [ 
    'type' => Segment::class, 
    'options' => [ 
       'route' => '/:lang/hello', 
       'defaults' => [ 
          'controller' => Controller\IndexController::class, 
          'action' => 'contact', 
          'lang'  => 'en' 
       ] 
    ], 
], 

, wenn ich auf die Webseite gehen http://localhost/pp/public/it/hello speichert sie die it Wert in die lang segment.

Das Problem ist auf meiner Navigation sagt es für die anderen Bereiche wie gezeigt:

http://localhost/pp/public/en/services

sein sollte

http://localhost/pp/public/it/services

Gibt es einen Grund, warum die Zend\Navigation nicht ist Verwenden des Werts it anstelle des Standardwerts en für den Parameter lang der Routenassembly

+1

Wenn der Parameter nicht mit Hilfe des URL-Helfers wie folgt übergeben wird: ''lang' => 'it'' es wird auf den Standardwert zurückgesetzt, anstatt den aktuellen Wert in Ihrer URL zu überprüfen. –

+0

@SvenBuis Ich würde sagen, dass dein Kommentar eher als Antwort gepostet werden sollte ... – Wilt

Antwort

0

Laut Sven Buis Kommentar können Sie manuell den aktuellen Wert zu jedem URL-Helper-Aufruf hinzufügen, aber das wäre wahrscheinlich nicht der beste Weg, da es bedeutet, Code überall für einen einzigen Zweck hinzuzufügen.

Eine andere Lösung besteht darin, einfach den letzten Parameter des URL-View-Helfers zu verwenden, der es ermöglicht, den aktuellen Routenparameter wiederzuverwenden (setzen Sie ihn auf true, der Standardwert ist false). Ich mag diese Lösung auch nicht, da Sie Randfälle haben können, bei denen alle Standardwerte nicht neu definiert wurden und das Ihren Code an Stellen brechen könnte, die Sie nicht erwarten würden.

Sie können sich die Vorgehensweise in https://github.com/juriansluiman/SlmLocale ansehen (funktioniert bisher nur in ZF2, ich hatte keine Zeit, meine PR für ZF3 zu beenden). Es verwendet das Ereignissystem, um sich in der Dispatch-Schleife einzuklinken und Ihre Spracheinstellung irgendwo dort einzustellen.

Verwandte Themen