如何在zend框架3中注入和使用插件

时间:2017-09-19 10:19:27

标签: php zend-framework3

我有一个控制器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
{
//....
}

2 个答案:

答案 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);
        }
    ],

],