passer les argument dans une validation de formulaire form builder (symfony)

Petit nouveau ! | 4 Messages

08 juil. 2022, 17:25

Bonjour,
j'implémente cette fonction "très basique" et j'ai du mal à faire passer les infos lors du clic "ajout dans le panier".
D'abord dans mon projet, le panier est une commande qui a un statut panier, et l'ajout au panier se fait uniquement pour les utilisateurs connéctés . Si jamais quelqu'un a une source /code qui remplit ces 2 critère je veux bien le checker.

Voici mes fichiers:

le formbuilder

Code : Tout sélectionner

$builder ->add('quantite'); $builder ->add('add', SubmitType::class, [ 'label' => 'Ajouter au panier', ]);
le twig:

Code : Tout sélectionner

{{ form_label(form.quantite) }} {{ form_widget(form.quantite, { 'attr': { 'class': 'form-control ' ~ (form.quantite.vars.valid ? '' : 'is-invalid') } }) }} <div class="invalid-feedback"> {{ form_errors(form.quantite) }} </div> </div> {{ form_widget(form.add, {'attr': {'class': 'btn btn-warning'}}) }}
et le controller qui semble faire être le souci

Code : Tout sélectionner

public function ajouterAuPanier(...) { $form = $this->createForm(AjouterAuPanierType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $item = $form->getData(); $item->setArticle($article); $panier = $user->getPanier(); $panier ->addArticleCommande($article) ->setDateMaj(new \DateTime()); $commandeRepository->PanierEnregistre($panier, $user); return $this->redirectToRoute('app_ajouter_panier', ['id' => $produit->getId()]); } return $this->render('catalogue/produit/articles.html.twig', [ 'produit' => $produit, 'form' =>$form->createView() ]); }
quand je clique sur ajouter au panier, j'obtiens
Too few arguments to function App\Entity\ArticleCommande::__construct(), 0 passed in C:\siteEcommerceApema\bases éventuelles\finish\vendor\symfony\form\Extension\Core\Type\FormType.php on line 160 and at least 2 expected

ArticleCommande est l'entité représentant les lignes d'une commande, donc l'objet à rajouter dans le panier

Mon problème:
je ne sais pas du tout à quel moment à quel endroit du code j'envoi ces paramètres.

J'ai essayé de faire

Code : Tout sélectionner

dd('qqchose')
dans le controller mais, l'erreur tombe avant (le controlleur return sur lui même).

La doc officielle est trop succinte du coup la validation du formulaire est très sombre pour moi.

Auriez vous des solutions ? Des sujets similaires résolus ? des documentations fournies ??

ynx
Eléphant du PHP | 494 Messages

12 juil. 2022, 13:38

Bonjour,

D'après le message d'erreur, le constructeur de l'entité ArticleCommande attends deux paramètres. Tu utilises bien l'injection de dépendances en typant correctement les paramètres du constructeur ?
Tu utilises un ParamConverter dans ton contrôleur pour récupérer cette entité ? Il ne faudrait pas instancier cet objet dans ton contrôleur à la place ?
Pourquoi rediriger vers la même route app_ajouter_panier après avoir effectué l'ajout au panier (il ne faudrait pas plutôt rediriger vers la liste d'articles ou vers la synthèse du panier) ?

Petit nouveau ! | 4 Messages

13 juil. 2022, 09:18

Bonjour, merci pour la réponse. Mon plus gros souci reste le manque d'xp et de formation en Symfony.
Je ne peux même pas repondre avec certitude si j'utilise l'injection de dependance, je pensais que c'était juste une methode de requetage depuis les repository.
je n'utilise pas ParamConverter.
J'ai pris cet excellent tuto
qferrer/introduction-building-a-shopping-cart-with-symfony-f7h
comme référence. Maintenant, je dois supprimer la session de panier et la remplacer par le panier du client. Logiquement c'est tout ce que je dois faire

ynx
Eléphant du PHP | 494 Messages

13 juil. 2022, 12:27

Peux t-on voir le code de ton entité ArticleCommande du coup ? Ainsi que les paramètres et éventuellement l'annotation/l'attribut de la méthode ajouterAuPanier ?
Tu peux aussi comparer ton code avec celui proposé par qferrer sur github, les entités de son projet n'ont pas de constructeur avec paramètres : https://github.com/qferr/happy-shop