Bonjour, j'espère être le plus clair possible et poster dans la bonne section.
Je commence tout juste avec Symfony et le dévelopement en général. Donc soyez indulgant.

Pour faire orginal j'ai un site de e-commerce à faire. J'ai choisi de faire un site pour vendre des vétements.

J'ai un table product. Dans cette table j'ai les champs qui ne sont que pour le produit comme son nom ou sa description.
J'ai une table avec toutes les tailles possibles.
J'ai ensuite une table many to many entre size et product. Dans cette table je renseigne la quantité avec un champ stock.

Mon processus est le suivant:

1- Je crée mon produit avec les champs présent sur la table produit.

2- Après la création je récupère l'id de ce produit avec un lien et je vais sur une autre page pour gérer les quantités.

3-Sur cette page je récupère mon formulaire de SizeProduct. Avec un champ pour size qui récupère les sizes dans le tableau size, un champ pour product qui récupère les produits dans la table product et un champ stock.

4- Mon problème est que je voudrais que mon champ product ne prenne que le product que je récupère avec mon id.

Je pensais faire un find($id) sur la table product et envoyer ce résultat sous forme de variable $product par le contrôleur et mettre dans mon formulaire SizeProduct et dans l'input product l'option data qui prendra la valeur $product. Mais cela ne fonctionne pas. A la place j'ai tout les produits.

Voici le code mon controleur.

  public function sizesAction($id, Request $request)
    {

$sizeproduct= new SizeProduct;
$repository = $this
  ->getDoctrine()
  ->getManager();

$product = $repository->getRepository('SportUsersBundle:Product')->find($id);
$size = $repository->getRepository('SportUsersBundle:Size')->findAll();
//$product = $repository->getRepository('SportUsersBundle:Product')->findAll();

$sizeproducts= $repository->getRepository('SportUsersBundle:SizeProduct')->findBy(array(                                                                                        'size'=>$size,
 'product'=>$product));

$allsize =$repository->createQuery(
  "SELECT p FROM SportUsersBundle:SizeProduct p WHERE p.product = '$id' AND p.status !=9"
)->getResult();

$form = $this->get('form.factory')->create(SizeProductType::class, $sizeproduct);

    if ($request->isMethod('POST')) {

$sizeproduct;

      $sizeproduct->setCreatedAt(new \DateTime('now'));
      $sizeproduct->setUpdateAt(new \DateTime('now'));
      $sizeproduct->setstatus(1);

      $form->handleRequest($request);
       $em = $this->getDoctrine()->getManager();
       $em->persist($sizeproduct);
       $em->flush();

       $request->getSession()->getFlashBag()->add('notice', 'Ce produit a bien été enregistré.');

       return $this->redirectToRoute('productsAdmin', array('title'=>'Gestion des produits'));
     }

          return $this->render('SportAdminBundle:Admin:Products\sizeproduct.html.twig', array(
          'form' => $form->createView(),
            'title'=>'Gestion des produits',
            'product'=>$product,
            'size'=>$size,
            'sizeproducts'=>$sizeproducts,
            'allsize'=> $allsize

          ));

    }

Et voici le code de mon formulaire

  public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('stock')

      ->add('size', EntityType::class, array(
        'class'=> 'Sport\UsersBundle\Entity\Size',
          'choice_label' => 'libelle',
          'expanded'=>false,
          'multiple'=>false,'attr' => array('class' => 'form-control') ))

->add('product', EntityType::class,array(
                                'class'=> 'Sport\UsersBundle\Entity\Product',
                                'choice_label'=>'description',

                                'expanded'=>false,
                                'multiple'=>false,'attr' => array('class' => 'form-control') ))

        ->add('save', SubmitType::class, array('label'=> 'envoyer','attr' =>array('class' => 'btn btn-default')));

    }

1 réponse


Bon, ma question ne passione personne.