ZF2 Verwenden Sie den Übersetzer im Controller

8

Für eine URL-Umleitung muss ich etwas in den Controller übersetzen.

Wie kann ich auf $ this- & gt; translate () zugreifen? in der Steuerung?

Danke! Nick

    
directory 10.01.2013, 15:16
quelle

7 Antworten

17

Die Übersetzung erfolgt über ein Translator . Der Übersetzer ist ein Objekt und wird beispielsweise in einen Ansichtshelfer eingefügt. Wenn Sie also diesen Ansichtshelfer aufrufen, verwendet er den Übersetzer, um Ihre Strings zu übersetzen. Für diese Antwort gehe ich davon aus, dass Sie den Übersetzer nur den wie die Skeleton-Anwendung .

Der beste Weg ist es, die Fabrik zu verwenden, um dies als eine Abhängigkeit in Ihren Controller zu injizieren. Die Controller-Konfiguration:

%Vor%

Und der Controller selbst:

%Vor%

Eine Alternative ist, den Übersetzer aus dem Service-Manager in Ihrer Aktion zu ziehen, aber das ist weniger flexibel, weniger testbar und schwieriger zu warten:

%Vor%

In beiden Fällen können Sie $translator->translate('foo bar baz') verwenden, um Ihre Strings zu übersetzen.

    
Jurian Sluiman 10.01.2013, 18:07
quelle
11

Wenn Sie den Übersetzer im Controller wie in der Ansicht verwenden möchten, einfach so:

%Vor%

statt hässlich :

%Vor%

Sie können auch das Übersetzungs-Plugin für den Controller schreiben, genauso wie den View-Helfer Zend\I18n\View\Helper\Translate .

Natürlich können Sie das Plugin mit der gleichen Signatur aufrufen:

%Vor%

Einfach registrieren:

%Vor%

Und Plugin schreiben:

%Vor%

Wie funktioniert es? Sie sehen, dass ServiceLocator in

übergeben wurde %Vor%

factory im Konfigurationsbereich controller_plugins , hat keinen Zugriff auf den Service Config in ServiceLocator im Controller. Sie können also die Konfiguration nicht aufrufen und das Objekt Translate über TranslatorServiceFactory erstellen.

Stattdessen können Sie auf den ServiceLocator zugreifen, der dem Controller zugewiesen ist, für den unser Helfer aufgerufen wurde, indem Sie $serviceLocator->getController() eingeben.

Natürlich ist $serviceLocator in createService method übergebene Instanz von Zend\Mvc\Controller\PluginManager .

Warum Proxy? Das über die Plugin-Factory zurückgegebene Objekt muss

implementieren %Vor%

welches in

abstrakt implementiert ist %Vor%

Also haben wir ein Proxy-Objekt erstellt, um alle Aufrufe von unserem Plugin an das Translate -Objekt weiterzuleiten.

Ich hoffe, es hat geholfen!

Ich habe einen Artikel in meinem eigenen Blog veröffentlicht.

    
Athlan 29.06.2013 19:00
quelle
1

Ich denke, es gibt einen nettesten Weg, es zu tun:

%Vor%     
Clawfire 15.02.2013 14:17
quelle
0
%Vor%     
JRT 10.02.2015 17:22
quelle
0

In meinem Fall funktioniert diese Lösung perfekt:

%Vor%     
Kunegunda Gburia-Furia 19.06.2015 12:42
quelle
0

Ein -invokable ist eine Klasse, die ohne Argumente konstruiert werden kann. Da unser MyModule \ Controller \ FooController jetzt ein erforderliches Argument hat, müssen wir dies ändern. Eine factory ist eine Klasse, die Instanzen einer anderen Klasse erstellt. Wir werden nun einen für unseren FooController erstellen. Lassen Sie uns unsere Datei module.config.php wie folgt ändern:

%Vor%

Implementieren Sie unsere Factory-Klasse. Erstellen Sie dazu einen neuen Ordner in \ module \ MyModule \ src \ MeinModul \ Factory und eine neue Datei namens FooControllerFactory.php :

%Vor%

Nutzen wir nun den $ Übersetzer in unserem FooController . Dazu müssen wir den Standard __ contruct () überschreiben:

%Vor%

Bei mir funktioniert das gut !!!

    
Carles 12.05.2017 09:07
quelle
-1

Sie können es so machen:

%Vor%     
Pervaiz Iqbal 15.08.2014 14:04
quelle