Symfony 4自动连线DataTransformerInterface

时间:2019-03-05 10:32:31

标签: symfony

我想构建一个新的表单类型来处理我的问题之一。

但是,使用此代码:

<?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”:参数   方法“ __construct()”的“ $ transformer”引用接口   “ Symfony \ Component \ Form \ DataTransformerInterface”,但没有此类服务   存在。您是否创建了实现此接口的类?

我试图关闭自动接线,但是我不能插入接口吗?

为什么我不能自动连接此Symfony界面?

2 个答案:

答案 0 :(得分:2)

如果您在自己的类(实现DataTransformerInterface)中拥有DataTransformer,则必须注入此类(您的实现),而不是接口。

请参阅https://symfony.com/doc/current/form/data_transformers.html#using-the-transformer

您当然可以为特定的实现对接口使用别名-但是,在注入接口时,您只能拥有一个DataTransformer。

答案 1 :(得分:-1)

因为DataTransformerInterface无法自动安装。

尝试一下,以查看自动装配类/接口

bin/console debug:autowiring

使其工作的唯一方法是创建一个实现DataTransformerInterface的服务类

通过在service.yml中配置新服务来注入新服务