zf2.2 translator周りの変更点
※2.2の変更履歴にありました。
デフォルトのトランスレータを設定するのに、
<?php $translator = $serviceManager->get('translator'); \Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
としているケースがありますが、古い設定のままだと、
Argument 1 passed to Zend\Validator\AbstractValidator::setTranslator() must be an instance of Zend\Validator\Translator\TranslatorInterface, instance of Zend\I18n\Translator\Translator given.
といったエラーになりました。
変更があって、下記のコメントの通り、translatorのfactoryをZend\Mvc\Service\TranslatorServiceFactoryに変更したほうがいいようです。
https://github.com/zendframework/zf2/issues/4413#issuecomment-17405785
Skeletonではどうなっているかを見ると、
https://github.com/zendframework/ZendSkeletonApplication/blob/master/module/Application/config/module.config.php#L60-L62
<?php array( 'service_manager' => array( 'abstract_factories' => array( 'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 'Zend\Log\LoggerAbstractServiceFactory', ), 'aliases' => array( 'translator' => 'MvcTranslator', ), ), )
なるほど、この通りでOKのようです。translatorを使っているのが一箇所なら、MvcTranslatorを指定した方がてっとり早いかもしれませんね。
translatorの設定が不要になりそう。Applicationモジュールに依存するのはつらいですよね。 translatorキーで依存を解決しているものが残っているので、aliasesかfactoryかどちらかで指定する必要はまだ、ありそうです。
<?php $translator = $serviceManager->get('MvcTranslator'); \Zend\Validator\AbstractValidator::setDefaultTranslator($translator);