Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all articles
Browse latest Browse all 1542

FOSUserBundle - Formulaire Imbriqué

$
0
0

Bonjour tous le monde,

Voilà mon problème, je veux imbriquer le formulaire "RegistrationType" de FOSUserBundle dans une autre formulaire dans mon cas dans le formulaire de l'entité Candidat. Mon entité candidat est propriétaire par relation OneToOne avec l'entité User.
L'enregistrement fonctionne mais j'ai un problème. Il n'y a aucune validation sur le formulaire imbriqué de l'entité User.

J'aimerais qu'il fasse les testes de validation de base présent dans FOSUserBundle, c'est à dire si l'email est unique, avec un paterne correcte et si le password est bon dans mon formulaire de Candidats.

Mon formulaire de Candidat avec le RegistrationType Imbriqué :
( ps: je précise que je ne veux pas fusionner mon entité User et mon entité Candidat, car j'ai une autre entité 'Client' qui utilise elle aussi User pour se loguer. J'aimerais vraiment laisser Vierge l'entité 'User' ).

Aidé moi s'il vous plais, je suis complètement bloquer à cause de ce soucis.
Merci de vos réponses !

namespace UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

public function buildForm(FormBuilderInterface $builder, array $options){
        $builder
        ->add('user',                           RegistrationType::class)
        ->add('firstname',                  TextType::class)
        ->add('lastname',                   TextType::class)
        ect ...
       }

Mon Formulaire de l'entité User RegistrationType Surchage Basic de FOSUserBundle

namespace UserBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class RegistrationType extends AbstractType{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
        $builder
        ->add('save', SubmitType::class);
    }
    public function getParent()
    {
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

}

Voici ma fonction d'ajouts de Candidat dans le Controller :

namespace CandidacyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use CandidacyBundle\Entity\Candidat;
use SchoolBundle\Entity\School;
use SchoolBundle\Entity\Section;

use CandidacyBundle\Form\Onepage\FolderSchoolType;

class FolderSchoolController extends Controller
{
public function addFolderAction(Request $request)
    {
        $em     = $this->getDoctrine()->getManager();
        $candidat = new candidat();
        $form = $this->createForm('CandidacyBundle\Form\Onepage\FolderSchoolType', $candidat);

        if($request->isMethod('POST') && $form->handleRequest($request)->isValid())
        {
            $em->persist($candidat);
            $em->flush();
            $this->get('session')->getFlashBag()->add('notice','Yours new candidacy is added !');
            return $this->redirectToRoute('candidacy_home');
        }
        return $this->render('CandidacyBundle:Folder_B:folder.html.twig', array(
            'new_folder' => $form->createView()
        ));
    }
    ect ...
 }

Et pour finir mes deux entités :
[ USER ]

namespace UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Constraints as Assert;

use Doctrine\ORM\Mapping as ORM;

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;


    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
    public function setEmail($email){

        parent::setEmail($email);
        $this->setUsername($email);
    }
}

CANDIDATS

<?php

namespace CandidacyBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Constraints as Assert;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\mapping\Annotation as Gedmo;

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
 * Candidat
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Candidat
{
//x - x - x - x - x - x - x - x - x - x - x - x - x - x - OBJ

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="UserBundle\Entity\User", cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     * @Assert\Valid
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="SchoolBundle\Entity\School")
     * @ORM\JoinColumn(name="id_school", referencedColumnName="id", nullable=true)
     */
    private $school;

    /**
     * @var boolean
     *
     * @ORM\Column(name="state", type="boolean")
     */
    private $state = true;

    /**
     * @var boolean
     *
     * @ORM\Column(name="state_blacklist", type="boolean")
     */
    private $stateBlacklist = false;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date_entry", type="datetime")
     */
    private $dateEntry;

    /**
     * @var string
     * @Assert\NotBlank()
     * @Assert\Length(min=3)
     * @ORM\Column(name="name", type="string", length=255, nullable=true)
     */
    private $firstname;

    /**
     * @var string
     * @Assert\NotBlank(message="Vous devez indiquer votre nom")
     * @Assert\Length(min=3)
     * @Assert\Regex(
     *     pattern="/\d/",
     *     match=false,
     *     message="Uniquement des lettres"
     * )
     * @ORM\Column(name="lastname", type="string", length=255, nullable=true)
     */
    private $lastname;

    /**
     * @var \date
     * @ORM\Column(name="date_birth", type="date", nullable=true)
     */
    private $dateBirth;

    /**
     * @var string
     *
     * @ORM\Column(name="nationality", type="string", length=255, nullable=true)
     */
    private $nationality;

    /**
     * @var integer
     *
     * @ORM\Column(name="phone", type="integer", nullable=true)
     */
    private $phone;

    /**
     * @var string
     *
     * @ORM\Column(name="adress_street", type="string", length=255, nullable=true)
     */
    private $adress_street;

    /**
     * @var string
     *
     * @ORM\Column(name="adress_city", type="string", length=255, nullable=true)
     */
    private $adress_city;

    /**
     * @var string
     *
     * @ORM\Column(name="adress_region", type="string", length=255, nullable=true)
     */
    private $adress_region;

    /**
     * @var string
     *
     * @ORM\Column(name="adress_country", type="string", length=255, nullable=true)
     */
    private $adress_country;

    /**
     * @var integer
     *
     * @ORM\Column(name="adress_zip", type="smallint", nullable=true)
     */
    private $adress_zip;

    ect ....

    ```





Viewing all articles
Browse latest Browse all 1542

Trending Articles