Bonjour à tous,

Je n'arrive plus à ajouter un objet en base de donnée avec doctrine et je ne comprend pas pourquoi
Le formulaire est valide et bien envoyé dans le requête vers le controlleur. Mais il ne me l'ajoute pas en base de données alors que cela marché auparavant.
Donc pour palier à ce problème à court terme, je génère des requête SQL en brut...
Sachant que lorsque j'ajoute une entité avec la commade : php bin/console doctrine:generate:entity
le mapping symfony ne me la trouve pas...

J'utilise symfony 3.4.

Est-ce quelqu'un à déjà rencontré ce problème ?

Merci par avance.

5 réponses


Salut,

est-ce que tu peux mettre le code de ton controlleur stp ?

Yes, le voici :

"```"

/**

  • Displays a form to edit an existing fiche entity.
  • @Route("/modifier/{id}", name="fiche_edit")
  • @Method({"GET","POST"})
    */
    public function editAction(Request $request, Fiche $fiche)
    {
    $deleteForm = $this->createDeleteForm($fiche);
    $editForm = $this->createForm('PointChaudBundle\Form\FicheType',$fiche);
    $editForm->handleRequest($request);

    $em = $this->getDoctrine()->getManager();
    
    $pointChaud = $em->getRepository('PointChaudBundle:PointChaud')->findOneBy(array('id' => $fiche->getIdpc()->getId()));
    $local = $em->getRepository('PointChaudBundle:Local')->findOneBy(array('id' => $pointChaud->getLocal()));
    $plan = $local->getPlan();
    
    $photoFiches =  $em->getRepository('PointChaudBundle:PhotoFiche')->findBy(['idfiche' => $fiche->getId()]);
    
    if ($editForm->isSubmitted() && $editForm->isValid()) {   
        $em->flush();        
        return $this->redirectToRoute('fiche_show',array(
            'idpc' => $fiche->getIdpc()->getId(), 
        ));
    }
    
    return $this->render('fiche/edit.html.twig', array(
        'fiche' => $fiche,
        'pointChaud'=>$pointChaud,
        'local' => $local ,
        'plan' => $plan ,
        'photoFiches' => $photoFiches,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));
    } 

"```"

Tu peux directement faire ceci de la création de ton editForm :

$editForm = $this->createForm(FicheType::class, $fiche);

De plus, est-ce que dans ton FicheType tu as bien un data_class sur ton entité :

public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Fiche::class,
        ]);
    }

Merci pour le raccourci et oui, mon FicheType :

`
<?php

namespace PointChaudBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;

class FicheType extends AbstractType
{
/**

  • {@inheritdoc}
    */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder
    ->add('traitement', TextType::class,[ 'attr'=>[ 'class'=> 'materialize-textarea',
    'style' => 'margin-bottom:15px',
    'class' =>"input-field white" ,
    'label' => 'Description de position']])
    ->add('descriptiontraitement', TextareaType::class,[ 'attr'=>[ 'class'=> 'materialize-textarea',
    'style' => 'margin-bottom:15px',
    'class' =>"input-field white" ,
    'label' => 'Description de position']])
    ->add('coutstraitement', TextareaType::class,[ 'attr'=>[ 'class'=> 'materialize-textarea',
    'style' => 'margin-bottom:15px',
    'class' =>"input-field white" ,
    'label' => 'Description de position']])
    ->add('materieltraitement', TextareaType::class,[ 'attr'=>[ 'class'=> 'materialize-textarea',
    'style' => 'margin-bottom:15px',
    'class' =>"input-field white" ,
    'label' => 'Description de position']])
    ->add('dosimetrieprevue', TextType::class,[ 'attr'=>[ 'class'=> 'materialize-textarea',
    'style' => 'margin-bottom:15px',
    'class' =>"input-field white" ,
    'label' => 'Description de position']])
    ->add('gaindosimetriqueattendu', TextType::class,[ 'attr'=>[ 'class'=> 'materialize-textarea',
    'style' => 'margin-bottom:15px',
    'class' =>"input-field white" ,
    'label' => 'Description de position']])
    ->add('etatfiche',ChoiceType::class,[ 'choices'=>[ 'INIT' =>'INIT',
    'ETUDE'=>'ETUDE',
    'ANALYSE'=>'ANALYSE',
    'PLANIFIE'=>'PLANIFIE',
    'TRAITE'=>'TRAITE',
    'REX'=>'REX' ],
    'attr'=>[ 'class' => "input-field col s12 m6",
    'style' => 'margin-bottom:15px']]) ;

    }

    /**

  • {@inheritdoc}
    */
    public function configureOptions(OptionsResolver $resolver)
    {
    $resolver->setDefaults(array(
    'data_class' => 'PointChaudBundle\Entity\Fiche'
    ));
    }

    /**

  • {@inheritdoc}
    */
    public function getBlockPrefix()
    {
    return 'pointchaudbundle_fiche';
    }

}

`

Tous les champs de ton type sont bien présent dans ton entité Fiche ?

De plus, vérifie le namespace de Request $request ; il doit venir de HttpFoundation.

Tu n'as aucune erreur lors de la soumission du formulaire ?
Question bête mais tu as bien une BDD à jour niveau migrations ? C'est-à-dire que tes entités et ta base sont identiques