Symfony 4.1 - не может вставлять зависимости в пользовательский базовый класс Form - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть служба с идентификатором manager_provider, и я хотел бы создать базовый класс формы с именем ManagerAwareType, в который будет добавлена ​​эта служба. Поэтому все классы форм, расширяющие этот класс, будут иметь доступ к manager_provider:

abstract class ManagerAwareType extends AbstractType
{
    /** @var ManagerProvider */
    private $managerProvider;

    // getter and setter...
}

Итак, моей первой попыткой было объявить это, используя _instanceof в services.yaml:

_instanceof:
    MyBundle\Form\ManagerAwareType:
      tags: [form.type]
      calls:
        - [setManagerProvider, ["@manager_provider"]]

, но когда я создаю форму в Controller, $managerProvider равен null. Затем я попытался сделать то же самое программно в классе DependencyInjection\Extension, и код выполняется без ошибок (проверено отладчиком):

$managerAwareType = new Definition(ManagerAwareType::class);
$managerAwareType->addTag('form.type');
$managerAwareType->addMethodCall('setManagerProvider', [new Definition('manager_provider')]);
$container->addDefinitions([$managerAwareType]); 

но опять-таки это не сработало, зависимость не вводится.

Что я делаю не так?

P.S: Я знаю, что могу объявить свою зависимость как параметр формы и внедрить ее каждый раз, когда создаю форму через контроллер, но я предпочитаю этот способ, если это возможно.

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны фактически рассказать своему ManagerAwareType классу о классе, который вы хотите ввести. Обычный способ - поместить его в функцию __construct:

abstract class ManagerAwareType extends AbstractType
{
    /** @var ManagerProvider */
    private $managerProvider;

    public function __construct(ManagerProvider $mp)
    {
        $this->managerProvider = $mp
    }

    // getter and setter...
}
...