具有最新更新的错误转换器

时间:2014-02-02 16:47:53

标签: php zend-framework zend-framework2 zend-framework-modules

我在最新版本上更新了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’);

由于

2 个答案:

答案 0 :(得分:1)

这里发生的事情很可能是DiAbstractServiceFactory在一个负责获取MvcTransator实例的抽象工厂之前就已经开始了。

您可能必须切换抽象工厂的使用顺序,或者从模块或自动加载配置中删除'di'配置,因为它的存在will automatically cause addition of the DiAbstractServiceFactory to the ServiceManager

答案 1 :(得分: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;
}