簡體   English   中英

具有文本域的Zf2翻譯驗證器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM