[英]Zf2 Translation Validator with Text Domain
我在翻譯器中有問題。 我想為每個模塊使用模塊特定的文本域( NAMESPACE )。 首先,我發現ZF2自2.2版起需要將翻譯器注入到Validator中,所以我在Application \\ Module.php中做了類似的事情
class Module
{
public function onBootstrap(\Zend\Mvc\MvcEvent $e)
{
$translator = new \Zend\Mvc\I18n\Translator(
$e->getApplication()->getServiceManager()->get('translator')
);
\Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
}
}
這可以注入默認的Translator。 因此,現在我需要為驗證器設置TextDomain。 當時我通過驗證器工廠為每個模塊驗證器設置了它們
Class PasswordFactory implements FactoryInterface
{
public function CreateServcie(ServiceLocatorInterface $sl) {
$validator = new PasswordValidator();
$validator->setTranslatorTextDomain('User'); // User = Module namespace
}
}
這行得通,但有點乏味,並且使代碼腫。 那么,有沒有一種簡單的方法可以為驗證者處理TextDomain? 例如,將它們附加到Event:Dispatch或通過Initializer?
問候
您可以在模塊中設置默認的TextDomain
class Module
{
public function onBootstrap(\Zend\Mvc\MvcEvent $e)
{
...
\Zend\Validator\AbstractValidator::setDefaultTranslatorTextDomain(__NAMESPACE__);
是的,它不起作用,因為NAMESPACE獲取本地NAMESPACE
要獲取最新的__NAMESPACE__
,可以使用MvcEvent::EVENT_DISPATCH
操作。
public function onBootstrap(MvcEvent $e)
{
...
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'setTextDomain'), 100);
}
public function setTextDomain(MvcEvent $e)
{
$currentNameSpace = $e->getRouteMatch()->getParam('__NAMESPACE__');
\Zend\Validator\AbstractValidator::setDefaultTranslatorTextDomain(currentNameSpace);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.