Bonjour,
j'ai codé un formulaire qui permet de remplir les détails d'une annonce, en plus les champs nom, prénom, ....
mais s'il s'agit d'un client déja connecté les champs nom, prénom, ... ne seront pas affichés.
l'enregitrement d'annonce se fait correctement pour les client inconnu. mais ça pose problème pour ceux connus, car id_customer prend null.
entité advert

<?php

namespace x\xxBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;

/**
 * Advert
 *
 * @ORM\Table(name="Advert")
 * @ORM\Entity(repositoryClass="x\xxBundle\Repository\AdvertRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Advert
{

    /**
     * @ORM\ManyToOne(targetEntity="x\xxBundle\Entity\Customer",cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $customer;    

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

 {...}

    /**
     * Set advert
     *
     * @param \x\xxBundle\Entity\Advert $advert
     *
     * @return Advert
     */
    public function setAdvert(\x\xxBundle\Entity\Advert $advert)
    {
        $this->advert = $advert;
        return $this;
    }

    /**
     * Get advert
     *
     * @return \x\xxBundle\Entity\Advert
     */
    public function getAdvert()
    {
        return $this->advert;
    }

    /**
     * Set customer
     *
     * @param \x\xxBundle\Entity\Customer $customer
     *
     * @return Advert
     */
    public function setCustomer(\x\xxBundle\Entity\Customer $customer)
    {
        $this->customer = $customer;
        return $this;
    }

    /**
     * Get customer
     *
     * @return \x\xxBundle\Entity\Customer
     */
    public function getCustomer()
    {
        return $this->customer;
    }
 }

advertType

<?php

namespace xx\XXBundle\Form;

{...}

class AdvertType extends AbstractType
{
    // ****pour controler la ajout customer****
    private $isGranted;
    public function __construct($isGranted)
    {
        $this->isGranted = $isGranted;
    }
    //****************************************
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
                ->add('title',       TextType::class
                        , array(
                        'label'=>'Titre',
                        'required'=> false,    
                        'attr' => array(
                        'placeholder' => 'Titre',
                        )))
                {...}
        ;
        // anonyme => ajout customer
        if(!($this->isGranted))
        {
             $builder->add('customer',    CustomerType::class);
        }
    }

    {...}

}

addAction

public function addAction(Request $request)
    {
            $advert = new Advert;
            $form = $this->createForm(new AdvertType($this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')), $advert);           
            if($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
        /*##############################################*/
            $file = $advert->getAdvertimage();
            $fileName = md5(uniqid()).'.'.$file->guessExtension();
            $file->move(
                $this->getParameter('images_directory'),
                $fileName
            );
            $advert->setAdvertimage($fileName);
        /*###############################################*/  
                $em = $this->getDoctrine()->getManager();
                $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');
          return $this->redirectToRoute('x_xx_show', array('id' => $advert->getId()));
        }
        return $this->render('XXXBundle:Advert:add.html.twig', array('form' => $form->createView(),
          ));
    }

Merci d'avance.

1 réponse


Avez vous essayer de faire

if(isset($this->getUser())){  // verifier si l'utilisateur est connecté 
    $advert->setCustomer($this->getUser()); //affecter l'utilisateur connecté à l'annonce
}