Переводчик ошибок с последним обновлением

Я обновил 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’);

Спасибо


person Oscar Fanelli    schedule 02.02.2014    source источник


Ответы (2)


Здесь происходит то, что, скорее всего, DiAbstractServiceFactory срабатывает перед абстрактной фабрикой, которая отвечает за получение экземпляра MvcTransator.

Скорее всего, вам придется изменить порядок использования абстрактных фабрик или удалить конфигурацию 'di' из модулей или конфигурацию автозагрузки, поскольку она присутствует автоматически приведет к добавлению DiAbstractServiceFactory к ServiceManager.

person Ocramius    schedule 02.02.2014

У меня была такая же проблема сегодня утром после обновления с 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);
}

to:

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;
}
person Benjamin Nolan    schedule 27.03.2014