我在一个项目中使用 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。两者都向我发送错误。我不知道发生了什么。
有人可以帮忙吗?
谢谢!