首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pimcore和依赖注入

Pimcore和依赖注入
EN

Stack Overflow用户
提问于 2016-11-18 21:29:34
回答 1查看 410关注 0票数 0

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

但我必须承认我不能让它工作。我读过那些网站:DIDIDI

以及php-di的文档,因为Pimcore正在使用它。

现在我有一个插件,一个简单的搜索,我想把它注入到我的一个控制器中。

插件结构如下所示:

代码语言:javascript
复制
plugins
  - MyPlugin
    - lib
      - MyPlugin
        - Models
          Search.php
    - static
    - plugin.xml

我想将Search.php中的类注入到我的控制器中。

代码语言:javascript
复制
# plugins/MyPlugin/lib/MyPlugin/Models/Search.php
class MyPlugin_Models_Search

该类本身没有命名空间,但在plugin.xml中定义了一个命名空间

代码语言:javascript
复制
# plugins/MyPlugin/plugin.xml
<pluginNamespace>MyPlugin</pluginNamespace>

我将di.example.php复制到website/config/di.php,它的名称是,我验证过了。

我的定义如下:

代码语言:javascript
复制
# 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 ...
];

我的控制器:

代码语言:javascript
复制
# 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中直接设置定义,但没有成功。

有什么想法吗?谢谢你,祝你有愉快的一天!

EN

回答 1

Stack Overflow用户

发布于 2016-12-05 23:07:49

你应该看看Plugin Developer Guide

代码语言:javascript
复制
 <!-- 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中,而不需要自己编写代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40678366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档