2016-11-18 5 views
0

Я хочу использовать инъекцию зависимостей в 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 и называется, я veryfied что.

Мои определения выглядеть следующим образом:

# 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.php в function getDiContainer(), но без успеха.

Любые идеи? Спасибо вам, у вас хороший день!

ответ

0

Вы должны взглянуть на Plugin Developer Guide:

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

Таким образом, вы можете добавить плагин пространство имен автозагрузчика с помощью конфигурации, не нужно закодировать это на свой собственный.

+0

btw: никогда не было необходимости изменять файлы DI для установки плагинов. – campino2k

+0

Вы можете посмотреть другие плагины, например «Member» https://github.com/pimcore-extensions/member/blob/master/plugin.xml – campino2k

 Смежные вопросы

  • Нет связанных вопросов^_^