我正在使用A2lix翻译表格捆绑和学说行为可翻译在我有两个实体的项目中:公司和文件。公司有一些可翻译的领域,所以我有一个CompanyTranslations实体。一家公司可以拥有一个文件,因此公司和文件使用OneToOne单向引用进行映射。公司文件是可翻译的,因此该属性位于CompanyTranslation文件中。
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。两者都给我发错。我不知道发生了什么。
有人可以帮忙吗?
谢谢!