0

我想在 Pimcore 中使用依赖注入。幸运的是,自 Pimcore 4.x 以来,这是开箱即用的。

但我必须承认我无法让它发挥作用。我读了这些网站:DIDIDI

以及 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.phpwebsite/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); }

}

我什至尝试直接在pimcore/lib/Pimcore.phpin 中设置定义function getDiContainer()但没有成功。

有任何想法吗?谢谢你,祝你有美好的一天!

4

1 回答 1

0

你应该看看插件开发指南

 <!-- 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>

因此,您可以通过配置将插件命名空间添加到 Autoloader,无需自己编写代码。

于 2016-12-05T15:07:48.500 回答