ZF2 mit der translator im controller
Für eine url-Umleitung, die ich brauche, etwas zu übersetzen, in die Steuerung.
Wie kann ich acces $this->übersetzen(); im controller?
Dank!
Nick
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine url-Umleitung, die ich brauche, etwas zu übersetzen, in die Steuerung.
Wie kann ich acces $this->übersetzen(); im controller?
Dank!
Nick
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übersetzung erfolgt über eine
Translator
. Der übersetzer ist ein Objekt und injiziert beispielsweise in einem view-helper, also, wenn Sie rufen, dass die view helper, verwendet der übersetzer für die übersetzung Ihrer Saiten. Für diese Antwort nehme ich Sie so konfiguriert haben, dass der übersetzer genauso wie der skeleton-Anwendung.Ist die beste Möglichkeit, die factory zu injizieren und diese als Abhängigkeit in den controller. Die controller-config:
Und der controller selbst:
Alternative ist, ziehen Sie die übersetzer aus den service-manager in Ihrem handeln, aber diese ist weniger flexibel, weniger überprüfbar und schwieriger zu pflegen:
In beiden Fällen können Sie
$translator->translate('foo bar baz')
zu übersetzen strings.MVCTranslator
.__NAMESPACE__
usw (Tipp: nicht!) und Sie habenApplication\Controller\Correspondencias
als aufrufbarer nebenCorrespondenciasController
als Fabrik. Tipp: schließen Sie die FQCN (also mit dem namespace) als controller name, entfernen Sie die__NAMESPACE__
- Taste und verwendenApplication\Controller\Correspondencias
als factory-name, entfernen Sie die aufrufbarer EintragWenn Sie möchten, verwenden Sie den übersetzer, in der controller, wie in Sicht, einfach so:
statt hässlich:
können Sie auch schreiben Sie die translate-plugin für den controller, genauso wie view Helfer
Zend\I18n\View\Helper\Translate
.Natürlich können Sie rufen Sie das plugin mit der selben Signatur:
Einfach registrieren:
- Und write-plugin:
, Wie es funktioniert?
Sie sehen, die
ServiceLocator
übergebenFabrik in configuration space
controller_plugins
hat keinen Zugriff auf dieConfig
service inServiceLocator
im controller. So dass Sie nicht bekommen kann die Konfiguration und legen Sie dieTranslate
Objekt überTranslatorServiceFactory
.Stattdessen können Sie den Zugriff auf die
ServiceLocator
zugeordnet, um den controller für die unsere Helfer aufgerufen wurde, durch Eingabe$serviceLocator->getController()
.Natürlich
$serviceLocator
übergebencreateService
Methode ist Instanz vonZend\Mvc\Controller\PluginManager
.Warum proxy?
Das zurückgegebene Objekt über das plugin Fabrik zu implementieren hat
ist Abstrakt umgesetzt
also haben wir proxy-Objekt leitet alle Aufrufe von unserem plugin, um die
Translate
Objekt.Hoffe, es half!
Habe ich einen Artikel veröffentlicht, in meinem eigenen blog.
Denke ich, es gibt eine schönste Art und Weise, es zu tun :
In meinem Fall perfekt funktioniert diese Lösung:
Einer aufrufbarer ist eine Klasse, die erstellt werden können, ohne irgendwelche Argumente. Da unsere MyModule\Controller\FooController hat jetzt ein argument benötigt, die wir brauchen, um dies zu ändern. Ein Fabrik ist eine Klasse, erstellt Instanzen einer anderen Klasse. Wir erstellen für unsere FooController. Wir ändern unsere module.config.php Datei wie folgt:
Lassen Sie uns die Umsetzung unserer Fabrik-Klasse für dieses erstellen Sie einen neuen Ordner in \module\MyModule\src\MyModule\Factory und neue Datei namens FooControllerFactory.php:
Wir verwenden nun die $translator innerhalb unserer FooController. Für diese brauchen wir überschreiben die Standard - __contruct():
In meinem Fall funktioniert!!!
Können Sie es tun auf diese Weise: