我想在Pimcore中使用依赖注入。幸运的是,自从Pimcore 4.x以来,这是可能的。
但我必须承认我不能让它工作。我读过那些网站:DI,DI,DI
以及php-di的文档,因为Pimcore正在使用它。
现在我有一个插件,一个简单的搜索,我想把它注入到我的一个控制器中。
插件结构如下所示:
plugins
- MyPlugin
- lib
- MyPlugin
- Models
Search.php
- static
- plugin.xml我想将Search.php中的类注入到我的控制器中。
# plugins/MyPlugin/lib/MyPlugin/Models/Search.php
class MyPlugin_Models_Search该类本身没有命名空间,但在plugin.xml中定义了一个命名空间
# plugins/MyPlugin/plugin.xml
<pluginNamespace>MyPlugin</pluginNamespace>我将di.example.php复制到website/config/di.php,它的名称是,我验证过了。
我的定义如下:
# website/config/di.php
<?php
return [
'MyPlugin' => DI\object()->property('myPlugin', DI\get('MyPlugin_Models_Search')),
# 'myPlugin' => \DI\object()->constructor(DI\get('MyPlugin_Models_Search'))
# 'myPlugin' => new MyPlugin_Models_Search() // crashes everything :)
# 'MyPlugin_Models_Search' => new MyPlugin_Models_Search()
# many more ...
];我的控制器:
# website/controllers/FooController.php
<?php
use Website\Controller\Action;
class FooController extends Action
{
public $myPlugin;
# this won't work: Declaration of FooController::__construct() must be
# compatible with Zend_Controller_Action_Interface::__construct(
# Zend_Controller_Request_Abstract $request, Zend_Controller_Response_
# Abstract $response, array $invokeArgs = Array)
public function __construct($plugin) {
$this->myPlugin = $plugin;
}
public function FooAction() { var_dump($this->myPlugin); }
}我甚至尝试在function getDiContainer()的pimcore/lib/Pimcore.php中直接设置定义,但没有成功。
有什么想法吗?谢谢你,祝你有愉快的一天!
发布于 2016-12-05 23:07:49
<!-- include paths relative to plugin-directory -->
<pluginIncludePaths>
<path>/ExtensionExample/path1</path>
<path>/ExtensionExample/path2</path>
</pluginIncludePaths>
<!-- namespaces to register with autoloader-->
<pluginNamespaces>
<namespace>ExtensionExample</namespace>
<namespace>Resource</namespace>
</pluginNamespaces>所以你可以通过config将你的插件命名空间添加到Autoloader中,而不需要自己编写代码。
https://stackoverflow.com/questions/40678366
复制相似问题