如何在zend framework 3中注入和使用插件
How to inject and use plugin in zend framework 3
我有一个控制器 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)
);
}
]
]
在上面的代码中你可以看到我正在注入一个插件 class \Commerce\Controller\Plugin\ProductPlugin::class
,它在 module.config.php
中定义
'controller_plugins' => [
'factories' => [
Controller\Plugin\ProductPlugin::class => InvokableFactory::class,
],
'aliases' => [
'product' => Controller\Plugin\ProductPlugin::class,
]
]
现在当我击中其余部分时 url 它显示错误消息
Unable to resolve service "Commerce\Controller\Plugin\ProductPlugin" to a
factory; are you certain you provided it during configuration?
我错过了什么?
插件代码是
<?php
namespace Commerce\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class ProductPlugin extends AbstractPlugin
{
//....
}
控制器插件不会注入控制器。
移除
$container->get(\Commerce\Controller\Plugin\ProductPlugin::class)
从工厂回调并从 ProductController 的构造函数中删除第二个参数
要使用该插件,只需执行以下操作:
$plugin = $this->plugin(Plugin\ProductPlugin::class);
或
// using the alias
$plugin = $this->product();
在你的动作控制器中。
我正在使用 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);
}
],
],
我有一个控制器 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)
);
}
]
]
在上面的代码中你可以看到我正在注入一个插件 class \Commerce\Controller\Plugin\ProductPlugin::class
,它在 module.config.php
'controller_plugins' => [
'factories' => [
Controller\Plugin\ProductPlugin::class => InvokableFactory::class,
],
'aliases' => [
'product' => Controller\Plugin\ProductPlugin::class,
]
]
现在当我击中其余部分时 url 它显示错误消息
Unable to resolve service "Commerce\Controller\Plugin\ProductPlugin" to a factory; are you certain you provided it during configuration?
我错过了什么?
插件代码是
<?php
namespace Commerce\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class ProductPlugin extends AbstractPlugin
{
//....
}
控制器插件不会注入控制器。 移除
$container->get(\Commerce\Controller\Plugin\ProductPlugin::class)
从工厂回调并从 ProductController 的构造函数中删除第二个参数
要使用该插件,只需执行以下操作:
$plugin = $this->plugin(Plugin\ProductPlugin::class);
或
// using the alias
$plugin = $this->product();
在你的动作控制器中。
我正在使用 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);
}
],
],