Symfony 4 AutoWire DataTransformerInterface - PullRequest
1 голос
/ 05 марта 2019

Я хочу создать новый тип формы для решения одной из моих проблем.

Но, используя этот код:

<?php
namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\DataTransformerInterface;

/**
 * Entity hidden custom type class definition
 */
class EntityHiddenType extends AbstractType
{
    /**
     * @var DataTransformerInterface $transformer
     */
    private $transformer;

    /**
     * Constructor
     *
     * @param DataTransformerInterface $transformer
     */
    public function __construct(DataTransformerInterface $transformer)
    {
        $this->transformer = $transformer;
    }

Я получил эту ошибку:

Невозможно автоматически подключить службу "App \ Form \ Type \ EntityHiddenType": аргумент "$ transformer "метода" __construct () "ссылается на интерфейс" Symfony \ Component \ Form \ DataTransformerInterface ", но такой службы не существует.Вы создали класс, который реализует этот интерфейс?

Я пытался отключить autowire, но я не могу добавить интерфейс правильно?

Почему я не могу autowire этоИнтерфейс Symfony?

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Если у вас есть DataTransformer в своем собственном классе (который реализует DataTransformerInterface), вы должны внедрить этот класс (вашу реализацию), а не интерфейс.

см. https://symfony.com/doc/current/form/data_transformers.html#using-the-transformer

Конечно, вы могли бы использовать псевдоним интерфейса для вашей конкретной реализации, но тогда вы могли бы иметь только один DataTransformer при внедрении интерфейса.

0 голосов
/ 05 марта 2019

Поскольку DataTransformerInterface не поддерживает автоматическую запись.

Попробуйте, чтобы увидеть классы / интерфейсы автопроводки

bin/console debug:autowiring

Единственный способ заставить его работать - это создать класс обслуживания, который реализует DataTransformerInterface

Добавьте ваш новый сервис, настроив его в service.yml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...