2017-09-19 34 views
0

我有一個控制器Controller\Api\ProductController休息呼叫,它在module.config.php如何注入和使用插件在Zend框架3

'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, 
    ] 
] 

定義現在,當我打的REST URL它顯示錯誤消息

無法將服務「Commerce \ Controller \ Plugin \ ProductPlugin」解析爲 工廠;你確定你在配置期間提供了它嗎?

我失蹤了什麼?

插件代碼是

<?php 

namespace Commerce\Controller\Plugin; 

use Zend\Mvc\Controller\Plugin\AbstractPlugin; 

class ProductPlugin extends AbstractPlugin 
{ 
//.... 
} 
+1

你'控制器\插件\ ProductPlugin'和您的命名空間是'商務部\控制器\ Plugin' +級'ProductPlugin' – Edwin

+0

@Edwin我試過'\商務部\控制器\插件\ ProductPlugin ::類'也在工廠裏。同樣的錯誤。 – amitshree

回答

0

我正在使用基本控制器,我不得不通過依賴關係 根據請求插入插件。 上面的配置很好。我所要做的就是在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); 
     } 
    ], 

], 
工廠
2

控制器插件不能注入到控制器。 從工廠回調刪除

$container->get(\Commerce\Controller\Plugin\ProductPlugin::class) 

,並從你的ProductController的的構造去掉第二個參數

使用的插件,只是做:

$plugin = $this->plugin(Plugin\ProductPlugin::class); 

// using the alias 
$plugin = $this->product(); 

在你的動作控制器。

+0

謝謝Jannes。雖然我使用的是基本控制器,但我必須根據請求動態地將插件注入到基本控制器。 – amitshree

+0

這種方式使用插件使得類更難測試。 –