Php 如何在zend framework 3中插入和使用插件
我有一个用于rest调用的控制器Php 如何在zend framework 3中插入和使用插件,php,zend-framework3,Php,Zend Framework3,我有一个用于rest调用的控制器controller\Api\ProductController,它在module.config.php 'controllers' => [ 'factories' => [ Controller\Api\ProductController::class => function($container) { return new Controller\Api\ProductController(
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)
);
}
]
]
'controller_plugins' => [
'factories' => [
Controller\Plugin\ProductPlugin::class => InvokableFactory::class,
],
'aliases' => [
'product' => Controller\Plugin\ProductPlugin::class,
]
]
在上面的代码中,您可以看到我正在注入一个插件类\Commerce\Controller\plugin\ProductPlugin::class
,它在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)
);
}
]
]
'controller_plugins' => [
'factories' => [
Controller\Plugin\ProductPlugin::class => InvokableFactory::class,
],
'aliases' => [
'product' => Controller\Plugin\ProductPlugin::class,
]
]
现在,当我点击RESTURL时,它会显示错误消息
无法将服务“Commerce\Controller\Plugin\ProductPlugin”解析为
工厂;您确定在配置过程中提供了它吗
我错过了什么
插件代码是
<?php
namespace Commerce\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class ProductPlugin extends AbstractPlugin
{
//....
}
控制器插件不会被注入控制器。
除去
并从ProductController的构造函数中删除第二个参数
要使用插件,只需执行以下操作:
$plugin = $this->plugin(Plugin\ProductPlugin::class);
或
在动作控制器中
控制器插件不会被注入控制器。
除去
并从ProductController的构造函数中删除第二个参数
要使用插件,只需执行以下操作:
$plugin = $this->plugin(Plugin\ProductPlugin::class);
或
在动作控制器中
我使用的是一个基本控制器,我必须通过依赖项注入插件
根据要求。
以上配置很好。我所要做的就是在service\u 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);
}
],
],
我使用的是一个基本控制器,我必须通过依赖项注入插件
根据要求。
以上配置很好。我所要做的就是在service\u 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);
}
],
],
在工厂里你有Controller\Plugin\ProductPlugin
,你的名字空间是Commerce\Controller\Plugin
+classProductPlugin
@Edwin我也在工厂里试过\Commerce\Controller\Plugin\ProductPlugin::class
。同样的错误。在工厂里你有Controller\Plugin\ProductPlugin
,你的名字空间是Commerce\Controller\Plugin
+classProductPlugin
@Edwin我也在工厂里试过\Commerce\Controller\Plugin\ProductPlugin::class
。同样的错误,谢谢你,简。虽然我使用的是一个基本控制器,并且我必须根据对基本控制器的请求动态地注入插件。但是这样使用插件会使类更难测试。谢谢Jannes。虽然我使用的是一个基本控制器,并且我必须根据对基本控制器的请求动态地注入插件,但这样使用插件会使类更难测试。