我想使用以下字段创建动态表单照片:
相册是一个复选框字段(带有'multiple'attr)。
照片与相册具有多对一关系。
我想做的是将具有不同相册值的照片保存几遍,而不是将一张相册的arrayCollection保留在一张照片中。
我试着做
如果($ request-> getMethod()=='POST'){
$form->bind($request); if ($form->isValid()) { $data = $form->getData(); $listeAlbum = $data['album']; foreach ($listeAlbum as $album) { $em->persist($photo); $em->flush(); }
我收到错误信息(在bind->($ request)行)
Catchable Fatal Error: Argument 1 passed to MySite\TestBundle\Entity
\Photo::setAlbum() must be an instance of MySite\TestBundle\Entity\Album,
instance of Doctrine\Common\Collections\ArrayCollection given, ...
有没有办法做到这一点?
编辑:更多代码。
我的表格类型
类PhotoType扩展AbstractType {
private $securityContext; public function __construct(SecurityContext $securityContext) { $this->securityContext = $securityContext; } public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('file', 'file') // , array("attr" => array("multiple" => "multiple", )) ->add('titre'); $user = $this->securityContext->getToken()->getUser(); if (!$user) { throw new \LogicException( 'The FriendMessageFormType cannot be used without an authenticated user!' ); } $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($user) { $form = $event->getForm(); $formOptions = array( 'multiple' => true, //several choices 'expanded' => true, // activate checkbox instead of list 'class' => 'EVeilleur\DefuntBundle\Entity\Album', 'property' => 'titre', 'query_builder' => function (EntityRepository $er) use ($user) { // build a custom query return $er->createQueryBuilder('u')->add('select', 'u') ->add('from', 'EVeilleurDefuntBundle:Album u'); // ->add('where', 'u.id = ?1') // ->add('orderBy', 'u.name ASC'); }, ); // create the field, = $builder->add() // field name, field type, data, options $form->add('album', 'entity', $formOptions); } ); } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'EVeilleur\DefuntBundle\Entity\Photo' )); } /** * @return string */ public function getName() { return 'eveilleur_defuntbundle_photo'; } }
实体关系,在Photo.php中
/** * @ORM\ManyToOne(targetEntity="EVeilleur\DefuntBundle\Entity\Album") * @ORM\JoinColumn(nullable=true) */ private $album;
我认为问题在于您将“相册”作为单个实体字段添加到“照片”表单中,但是您的选择意味着它将被转换为一组复选框,这些复选框在逻辑上由Symfony启用了提交到ArrayList。您的照片实体只需要一个相册。
您能否张贴其余的Photo实体,特别是setAlbum方法(如果在这种情况下您实际上不需要创建一个,很抱歉,即使它们很琐碎,我也总是创建我的照片!)?
如果“照片”是具有相册的“ ManyToOne”,则一个相册中可以包含许多照片,并且“相册”字段应该是一个下拉列表-您不能选择多个相册。这可能是问题的根源。
如果一个相册中可以包含许多照片,而每张照片中也可以包含多个照片,那么您确实有一个ManyToMany关系,在这里似乎并不是这样建模的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句