代码之家  ›  专栏  ›  技术社区  ›  Garry

Zend\Mvc\Controller\PluginManager::get无法获取或创建translate的实例

  •  1
  • Garry  · 技术社区  · 8 年前

    我编写了一个控制器插件,使用ZF 2.5获得MVC转换器。

    这是我的translate控制器插件

    namespace Freedom\Controller\Plugin;
    
    use Zend\Mvc\Controller\Plugin\AbstractPlugin;
    use Zend\I18n\Translator\Translator;
    
    /**
     * Translate
     *
     */
    class Translate extends AbstractPlugin
    {
    
        /**
         *
         * @var Translator
         */
        private $translator;
    
        public function __construct(Translator $translator)
        {
            $this->translator = $translator;
        }
    
        /**
         * Translate message
         * @param string $message
         * @param string $textDomain
         * @param string $locale
         * @return string
         */
        public function __invoke($message, $textDomain = 'default', $locale = null)
        {
            return $this->translator->translate($message, $textDomain, $locale);
        }
    
        /**
         *
         * @return Translator
         */
        function getTranslator()
        {
            return $this->translator;
        }
    
    }
    

    并且是工厂

    namespace Freedom\Controller\Plugin\Service;
    
    use Zend\ServiceManager\FactoryInterface;
    use Interop\Container\ContainerInterface;
    use Zend\ServiceManager\ServiceLocatorInterface;
    use Freedom\Controller\Plugin\Translate;
    
    /**
     * TranslateFactory
     *
     */
    class TranslateFactory implements FactoryInterface
    {
        public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
        {
            return new Translate($container->get('translator'));
        }
    
        public function createService(ServiceLocatorInterface $container)
        {
            return $this($container->getServiceLocator(), Translate::class);
        }
    }
    

    'controller_plugins' => [
        'factories' => [
            'checkRedirect' => 'Freedom\Controller\Plugin\Service\CheckRedirectFactory',
            'translate' => 'Freedom\Controller\Plugin\Service\TranslateFactory',
        ],
    ],
    

    我的问题是,我得到了这个错误,我不明白为什么。

    Zend\Mvc\Controller\PluginManager::get was unable to fetch or create an instance for translate
    

    正如你所见,我已经在我的模块中注册了插件。但是插件管理器找不到它。我已经检查了配置中是否存在controller\u plugins键,以及我的命名空间是否正确。我还有另一个名为checkRedirect的插件,它会产生相同的错误。

    我简直搞不懂发生了什么事,请有人告诉我我错过了什么,非常感谢。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Garry    8 年前

    我终于发现了问题,我从 controllers constructor 这不起作用。从一个动作中呼叫,一切正常。

        2
  •  0
  •   Gautam Rai    8 年前

    我认为一切都好,但你需要更新这个,

    'controller_plugins' => [
        'factories' => [
            'checkRedirectPlugin' => 'Freedom\Controller\Plugin\Service\CheckRedirectFactory',
            'translatePlugin' => 'Freedom\Controller\Plugin\Service\TranslateFactory',
        ],
       'aliases' =>[
           'checkRedirect' => 'checkRedirectPlugin',
            'translate' => 'translatePlugin'
        ]
    
    ],
    

    $this->translate()