我已经编写了一个控制器插件来使用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的插件,它会产生同样的错误。
我根本无法弄清楚发生了什么,请有人告诉我我错过了什么,非常感谢。
答案 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的插件无法正常工作。从一个动作打来,一切都好。