我有一个控制器Controller\Api\ProductController
用于休息通话,并在module.config.php
中定义了
'controllers' => [
'factories' => [
Controller\Api\ProductController::class => function($container) {
return new Controller\Api\ProductController(
$container->get(\Commerce\Model\Product::class), $container->get(\Commerce\Controller\Plugin\ProductPlugin::class)
);
}
]
]
在上面的代码中,您可以看到我正在注入\Commerce\Controller\Plugin\ProductPlugin::class
中定义的插件类module.config.php
'controller_plugins' => [
'factories' => [
Controller\Plugin\ProductPlugin::class => InvokableFactory::class,
],
'aliases' => [
'product' => Controller\Plugin\ProductPlugin::class,
]
]
现在,当我点击其余网址时,会显示错误消息
无法解析服务" Commerce \ Controller \ Plugin \ ProductPlugin"到了 厂;你确定你在配置期间提供了吗?
我失踪了什么?
插件代码
<?php
namespace Commerce\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class ProductPlugin extends AbstractPlugin
{
//....
}
答案 0 :(得分:2)
控制器插件不会注入控制器。 删除
$container->get(\Commerce\Controller\Plugin\ProductPlugin::class)
来自工厂回调,并从ProductController
的构造函数中删除第二个参数要使用该插件,只需执行以下操作:
$plugin = $this->plugin(Plugin\ProductPlugin::class);
或
// using the alias
$plugin = $this->product();
在您的动作控制器中。
答案 1 :(得分:0)
我使用Base控制器,我不得不通过依赖项注入插件
根据要求。
以上配置很好。我所要做的就是在service_manager
部分定义我的插件。
'service_manager' => [
'factories' => [
Controller\Plugin\ProductPlugin::class => function($sm) {
$dependencies = /////
$model = new \Commerce\Model\Product($dependencies);
return new Controller\Plugin\ProductPlugin($model);
},
\Commerce\Model\Product::class => function($sm) {
$dependencies = /////
return new \Commerce\Model\Product($dependencies);
}
],
],