bonjour,
j'ai un problème sur l'affichage de mon formulaire de type OneToMany qui me retour ceci:
The form's view data is expected to be an instance of class
BackOffice\Model\UserInfo, but is an instance of class Doctrine\Common\Collections\ArrayCollection. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms an instance of class Doctrine\Common\Collections\ArrayCollection to an instance of BackOffice\Model\UserInfo
et si j'enlève le changement type de UserInfo dans ma classe User::__construct
ça me renvoi ceci
Neither the property "UserInfo" nor one of the methods "setUserInfo()", "set()" or "call()" exist and have public access in class "Proxies__CG__\VS\UserBundle\Entity\Description".
voici mes codes:
//le formulaire User
namespace BackOffice\Formulaire;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use BackOffice\Formulaire\UserInfoType;
class UserType extends AbstractType{
/*..*/
public function builder(FormBuilderInterface $builder, array $options){
$builder->add('UserInfo',new UserInfoType);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'BackOffice\Model\User'
));
}
}
//le formulaire UserInfo
namespace BackOffice\Formulaire;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use BackOffice\Formulaire\UserInfoType;
class UserInfoType extends AbstractType{
public function builder(FormBuilderInterface $builder, array $options){
$builder->add('adr1','text',array('attr'=>array('placeholder'=>'adresse1')));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'BackOffice\Model\UserInfo'
));
}
}
//le model User
namespace BackOffice\Model;
use Symfony\Component\Security\Core\User\UserInterface;
use UserInfo;
class User extends UserInterface{
/*.autre attribut.*/
/**
*@ORM\OneToMany(targetEntity="UserInfo", mappedBy="user", cascade={"persist"})
*@ORM\JoinColumn(nullable=false)
*/
private $UserInfo;
public function __construct(){
$this->UserInfo = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addUserInfo(UserInfo $userinfo){
$this->UserInfo[] = $userinfo;
return $this;
}
public function removeUserInfo(UserInfo $userinfo){
$this->UserInfo->removeElement($userinfo);
return $this;
}
public function getUserInfo(){
return $this->UserInfo;
}
}
//le modèle UserInfo:
namespace BackOffice\Model;
use User;
class UserInfo{
/*.autre attribut.*/
/**
*@ORM\ManyToOne(targetEntity="User", inversedBy="UserInfo", cascade={"persist"})
*@ORM\JoinColumn(nullable=false)
*/
private $user;
public function setUser(User $user){
$this->user = $user;
}
public function getUser(){
return $this->user;
}
}
en tombant sur d'autre forum, je vois qu'il faut ajouté un attribut multiple =true à la formulaire UserType, cela n'est valable qu'au type de champ entité ou collection mais moi je veux avec un type "entityType" comme UserInfoType, à part de créer une formulaire personnalisé pour ajouter l'attribut multiple, y a-t-il d'autre solution de ce genre.
Merci.
Une onetomany sous entend un type collection DOC
Dans ton formulaire tu veux ajouter plusieurs autre entités en les créant. L'erreur "Proxies__CG\VS\UserBundle\Entity\Description".
vient du lazy loading de doctrine. Tu peux spécifier un fetch EAGER dans tes relations pour eviter ce genre d'erreurs.
Exemple: *ManyToOne(targetEntity="Group", cascade={"all"}, fetch="EAGER")