0

我已经更新了最新版本的 zf2,我收到了这个错误:http: //jsfiddle.net/8Ft6d/

为翻译添加了一些强制性参数?

这是我的翻译配置:

'translator' => array(
    'locale' => 'it_IT',
    'translation_file_patterns' => array(
        array(
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
        ),
    ),
),
'service_manager' => array(
    'aliases' => array(
        'translator' => 'MvcTranslator',
    ),
),

这就是我在 Module.php::onBootstrap() 中所说的

$translator = $serviceManager->get('translator’);

谢谢

4

2 回答 2

1

这里发生的事情很可能DiAbstractServiceFactory是在负责获取MvcTransator实例的抽象工厂之前启动。

您可能必须切换使用抽象工厂的顺序,或者'di'从模块中删除配置或自动加载配置,因为它的存在会自动导致DiAbstractServiceFactoryServiceManager.

于 2014-02-02T17:05:03.157 回答
0

从 2.2.6 升级到 2.3.0 后,我今天早上自己也遇到了同样的问题。

ZF2.3.0 中有一个错误会导致 Di 模块在尝试创建 MvcTranslator 的实例时失败(请参阅:https ://github.com/zendframework/zf2/pull/5959 ,其中@Ocramius 和 noopable 提出了解决方案)。

在将修复程序推广到框架之前,您需要将以下代码更改为Zend\ServiceManager\Di\DiAbstractServiceFactory

public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
{
    return $this->instanceManager->hasSharedInstance($requestedName)
        || $this->instanceManager->hasAlias($requestedName)
        || $this->instanceManager->hasConfig($requestedName)
        || $this->instanceManager->hasTypePreferences($requestedName)
        || $this->definitions->hasClass($requestedName);
}

至:

public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
{
    if ($this->instanceManager->hasSharedInstance($requestedName)
        || $this->instanceManager->hasAlias($requestedName)
        || $this->instanceManager->hasConfig($requestedName)
        || $this->instanceManager->hasTypePreferences($requestedName)
    ) {
        return true;
    }

    if (! $this->definitions->hasClass($requestedName) || interface_exists($requestedName)) {
        return false;
    }

    return true;
}
于 2014-03-27T12:28:47.440 回答