[FOS] enregistrement utilisateur

Par astavrou, il y a 10 ans


Bonjour,

Je n'arrive pas à procéder à l'enrigistrement d'un utilisateur après avois mis 3 relations bidirectionnelles sur la surchage de l'entité Users, sans ces surcharges, tout se déroule parfaitement.

Je vous mets tout d'abord l'erreur Symfony2 :

Catchable Fatal Error: Argument 1 passed to UserBundle\Entity\Users::addContact() must be an instance of UserBundle\Entity\Contacts, string given, called in C:\wamp2\www\ecommerce\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 486 and defined

Voilà mon entité Users après surcharge :

<?php namespace UserBundle\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * Users * * @ORM\Table("sy_users") * @ORM\Entity */ class Users extends BaseUser { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; public function __construt() { parent::__construct(); $this->contact = new \Doctrine\Common\Collections\ArrayCollection(); $this->address = new \Doctrine\Common\Collections\ArrayCollection(); $this->professional = new \Doctrine\Common\Collections\ArrayCollection(); } /** * @ORM\OneToMany(targetEntity="UserBundle\Entity\Contacts", mappedBy="user", cascade={"remove"}) * @ORM\JoinColumn(nullable=true) */ private $contact; /** * @ORM\OneToMany(targetEntity="UserBundle\Entity\Address", mappedBy="user", cascade={"remove"}) * @ORM\JoinColumn(nullable=true) */ private $address; /** * @ORM\OneToMany(targetEntity="UserBundle\Entity\Professionals", mappedBy="user", cascade={"remove"}) * @ORM\JoinColumn(nullable=true) */ private $professional; /** * @var string * * @ORM\Column(name="typeCustomer", type="string", length=5) */ private $typeCustomer; /** * @var string * * @ORM\Column(name="numCustomer", type="string", length=15) */ private $numCustomer; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set typeCustomer * * @param string $typeCustomer * * @return Users */ public function setTypeCustomer($typeCustomer) { $this->typeCustomer = $typeCustomer; return $this; } /** * Get typeCustomer * * @return string */ public function getTypeCustomer() { return $this->typeCustomer; } /** * Set numCustomer * * @param string $numCustomer * * @return Users */ public function setNumCustomer($numCustomer) { $this->numCustomer = $numCustomer; return $this; } /** * Get numCustomer * * @return string */ public function getNumCustomer() { return $this->numCustomer; } /** * Add contact * * @param \UserBundle\Entity\Contacts $contact * * @return Users */ public function addContact(\UserBundle\Entity\Contacts $contact) { $this->contact[] = $contact; return $this; } /** * Remove contact * * @param \UserBundle\Entity\Contacts $contact */ public function removeContact(\UserBundle\Entity\Contacts $contact) { $this->contact->removeElement($contact); } /** * Get contact * * @return \Doctrine\Common\Collections\Collection */ public function getContact() { return $this->contact; } /** * Add address * * @param \UserBundle\Entity\Address $address * * @return Users */ public function addAddress(\UserBundle\Entity\Address $address) { $this->address[] = $address; return $this; } /** * Remove address * * @param \UserBundle\Entity\Address $address */ public function removeAddress(\UserBundle\Entity\Address $address) { $this->address->removeElement($address); } /** * Get address * * @return \Doctrine\Common\Collections\Collection */ public function getAddress() { return $this->address; } /** * Add professional * * @param \UserBundle\Entity\Professionals $professional * * @return Users */ public function addProfessional(\UserBundle\Entity\Professionals $professional) { $this->professional[] = $professional; return $this; } /** * Remove professional * * @param \UserBundle\Entity\Professionals $professional */ public function removeProfessional(\UserBundle\Entity\Professionals $professional) { $this->professional->removeElement($professional); } /** * Get professional * * @return \Doctrine\Common\Collections\Collection */ public function getProfessional() { return $this->professional; } }

Voilà ce que me renvoie mon formulaire d'enregistrement après validation :

array (size=1) 'fos_user_registration_form' => array (size=12) 'email' => string 'test@test.test' (length=14) 'username' => string 'test' (length=4) 'plainPassword' => array (size=2) 'first' => string 'azertyui' (length=8) 'second' => string 'azertyui' (length=8) 'typeCustomer' => string 'pro' (length=3) 'numCustomer' => string '41005066' (length=8) 'enabled' => string '0' (length=1) 'locked' => string '1' (length=1) 'contact' => array (size=6) 'lastname' => string 'test' (length=4) 'firstname' => string 'test' (length=4) 'phone' => string 'test phone' (length=10) 'mail' => string 'test@test.test' (length=14) 'fax' => string '' (length=0) 'cellphone' => string '' (length=0) 'address' => array (size=5) 'street' => string 'La Gotta 11' (length=11) 'complement' => string '' (length=0) 'town' => string 'PARIS' (length=5) 'postal' => string '75010' (length=5) 'country' => string 'FR' (length=2) 'professional' => array (size=5) 'business' => string 'TEST SARL' (length=9) 'siret' => string '' (length=0) 'icVat' => string '' (length=0) 'delay' => string '0' (length=1) 'vat' => string '1' (length=1) 'create' => string '' (length=0) '_token' => string 'ZrTaxNqhzcpqf6zb2ARJ_jVMjun7zpKvvEwgqQqw40c' (length=43)

Je vous mets la surcharge du formulaire d'inscription, si l'erreur viens de là :

<?php namespace UserBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class RegistrationType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('typeCustomer', 'choice', array('label' => 'registration.typeCustomer', 'translation_domain' => 'FOSUserBundle', 'choices' => array('part' => 'form.part', 'pro' => 'form.pro', 'admin' => 'form.admin', 'assoc' => 'form.assoc'), 'preferred_choices' => array('part'))) ->add('numCustomer', 'hidden', array('data' => '1510-10-00001')) ->add('enabled', 'hidden', array('data' => 1)) ->add('locked', 'hidden', array('data' => 0)) ->add('contact', new ContactType()) ->add('address', new AddressType()) ->add('professional', new ProfessionalType()) ->add('create', 'submit', array('label' => 'form.create', 'translation_domain' => 'FOSUserBundle')); } public function getParent() { return 'fos_user_registration'; } public function getName() { return 'userbundle_registration'; } }

J'ai essayé de passé 'contact' , 'address' et 'professional' en collection, mais je n'y arrive pas, cela viendrait-il de là ?
Alors j'ai essayé de creuser, mais tout ce que j'ai essayé c'est soldé par un échec.

Merci d'avance pour votre aide.

Aucune réponse