【发布时间】:2014-08-16 10:05:00
【问题描述】:
我的翻译器有问题。我想为每个模块使用一个模块特定的文本域(NAMESPACE)。首先,我看到 ZF2 从 2.2 版开始需要将翻译器注入验证器,所以我在我的 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);
}
}
这可以注入默认的翻译器。所以现在我需要为验证器设置 TextDomain。当时我通过验证器工厂为每个模块验证器设置它们,例如
Class PasswordFactory implements FactoryInterface
{
public function CreateServcie(ServiceLocatorInterface $sl) {
$validator = new PasswordValidator();
$validator->setTranslatorTextDomain('User'); // User = Module namespace
}
}
这可行,但它有点乏味并且使代码膨胀。 那么有没有一种简单的方法来处理验证器的 TextDomains?例如在 Event:Dispatch 或通过 Initializer 附加它们?
问候
【问题讨论】:
-
你是否只从模块
User调用PasswordFactory?如果正确,您可以在PasswordFactory中创建__construct()并调用\Zend\Validator\AbstractValidator::setDefaultTranslatorTextDomain('User');
标签: php validation zend-framework2 zend-translate