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

时间:2017-08-07 19:35:43

标签: zend-framework2

我已经编写了一个控制器插件来使用ZF 2.5来获取MVC翻译器。

这是我的翻译控制器插件

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);
    }
}

最后在我的module.config

'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

正如您所看到的,我已在module.config中注册了该插件,但插件管理器找不到它。我已经检查过配置中是否存在controller_plugins密钥,而且我的命名空间是正确的。我还有另一个名为checkRedirect的插件,它会产生同样的错误。

我根本无法弄清楚发生了什么,请有人告诉我我错过了什么,非常感谢。

2 个答案:

答案 0 :(得分:0)

请试试这个,也许可以帮到你。

我认为一切正常,但你需要更新它,

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

],

现在使用别名,您现在可以从控制器访问,

$this->translate()

答案 1 :(得分:0)

我终于找到了问题,我正在调用来自controllers constructor的插件无法正常工作。从一个动作打来,一切都好。