Я хочу использовать инъекцию зависимостей в 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()
, но без успеха.
Любые идеи? Спасибо вам, у вас хороший день!
btw: никогда не было необходимости изменять файлы DI для установки плагинов. – campino2k
Вы можете посмотреть другие плагины, например «Member» https://github.com/pimcore-extensions/member/blob/master/plugin.xml – campino2k