1

我在一个项目中使用 A2lix Translation Form Bundle 和 Doctrine Behaviors Translatable,我有两个实体:公司和文件。公司有一些可翻译的字段,所以我有一个 CompanyTranslations 实体。一家公司可以有一个文件,因此公司和文件使用 OneToOne 单向引用进行映射。公司文件是可翻译的,因此该属性位于 CompanyTranslation 文件中。

公司翻译:

class CompanyTranslation
{
    use ORMBehaviors\Translatable\Translation;

    /**
     * @ORM\OneToOne(targetEntity="File", cascade={"persist"})
     * @ORM\JoinColumn(name="translatable_file_id", referencedColumnName="id")
     * @Assert\Valid()
     * @Assert\Type(type="MyApp\CoreBundle\Entity\File")
     **/
    private $translatableFile;

    /**
     * Set translatableFile
     *
     * @param $translatableFile
     */
    public function setTranslatableFile(File $translatableFile = null)
    {
        $this->translatableFile = $translatableFile;
    }

    /**
     * Get translatableFile
     *
     * @return $translatableFile
     */
    public function getTranslatableFile()
    {
        return $this->translatableFile;
    }
}

文件:

class File
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    public $filePath;

    /**
     * @Assert\File()
     */
    private $file;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set filePath
     *
     * @param string $filePath
     */
    public function setFilePath($filePath)
    {
        $this->filePath = $filePath;
    }

    /**
     * Get filePath
     *
     * @return string
     */
    public function getFilePath()
    {
        return $this->filePath;
    }

    /**
     * Set file
     *
     * @param UploadedFile $file
     */
    public function setFile(UploadedFile $file = null)
    {
        $this->file = $file;
    }

    /**
     * Get file
     *
     * @return UploadedFile
     */
    public function getFile()
    {
        return $this->file;
    }
}

文件表格类型:

class FileType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('file', 'file', array(
            'label' => false
        ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'MyApp\CoreBundle\Entity\File'
        ));
    }

    public function getName()
    {
        return 'file_form';
    }
}

公司表格类型:

class CompanyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('translations', 'a2lix_translationsForms', array(
                'locales' => $this->languages,
                'form_type' => new FileType(),
                'form_options' => array(
                    'data_class' => 'MyApp\CoreBundle\Entity\File',
                    'required'      => false,
                    'validation_groups' => array('file_upload')
                )
            ));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        parent::setDefaultOptions($resolver);

        $resolver->setDefaults(array(
            'data_class' => 'MyApp\CoreBundle\Entity\Company'
        ));
    }
}

错误是这个:

表单的视图数据应该是 MyApp\CoreBundle\Entity\File 类的一个实例,但它是 MyApp\CoreBundle\Entity\CompanyTranslation 类的一个实例。您可以通过将“data_class”选项设置为 null 或添加将 MyApp\CoreBundle\Entity\CompanyTranslation 类的实例转换为 MyApp\CoreBundle\Entity\File 的实例的视图转换器来避免此错误。

我已经将文件类型表单的 data_class 和字段的 data_class 设置为 null,但也设置为 MyApp\CoreBundle\Entity\File。两者都向我发送错误。我不知道发生了什么。

有人可以帮忙吗?

谢谢!

4

0 回答 0