La Ferme du web - Les forums

Venez baraguiner avec la communauté !

Vous n'êtes pas identifié.

#1 19/02/2013 15:35:15

PouletFermier
Membre
Date d'inscription: 19/02/2013
Messages: 1

(symfony) problème lors de l'ajout d'une épreuve dans une BDD mysql

Bonjour,

Je souhaite avoir une page ajouter qui permet d'ajouter une épreuve dans ma table epreuve de la BDD bulletin.
J'ai un formulaire mais quand je clique sur envoyer, j'obtiens cette erreur :
Expected argument of type "object or array", "NULL" given

Et sur une autre page, je souhaite modifier une épreuve ( champs : intituleEp, coefficientEp, #laClasse_id), cette fois ci, j'obtiens bien le formulaire où je peux modifier les valeurs mais quand je clique sur valider, j'obtiens cette erreur :
Neither element "id" nor method "setId()" exists in class "Proxies\AdminBulletinBundleEntityclasseProxy"

dans mon form :

Code:

<?php
namespace Admin\BulletinBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class EpreuveForm extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {        
        $builder
            ->add('intituleEp' )
            ->add('coefficientEp' )
            ->add('laClasse.id' )
        ;
    }
    
    public function getName()
    {
        return 'epreuve';
    }    
}
?>

Dans le controller :

Code:

class EpreuveController extends ContainerAware
{
public function ajouterAction()
    {
    $liste=$this->getDoctrine()->getEntityManager()->getRepository('AdminBulletinBundle:epreuve')->findAll();
    $epreuve = new epreuve();
    $form = $this->container->get('form.factory')->create(new EpreuveForm(), $epreuve);

    return $this->container->get('templating')->renderResponse(
    'AdminBulletinBundle:Default:ajouter.html.twig',
    array(
    'form' => $form->createView(),
    'message' => ''
       ));
    }

public function modifierAction($id)
    {
    return $this->container->get('templating')->renderResponse(
'AdminBulletinBundle:Default:modifier.html.twig');
    }

public function supprimerAction($id)
    {
    return $this->container->get('templating')->renderResponse(
'AdminBulletinBundle:Default:supprimer.html.twig');
    }

public function listerAction()
{        
    $em = $this->container->get('doctrine')->getEntityManager();

    $epreuve =$em->getRepository('AdminBulletinBundle:epreuve')->findAll();

    return $this->container->get('templating')->renderResponse('AdminBulletinBundle:Default:lister.html.twig', 
    array(
    'epreuve' => $epreuve
     ));
}


public function editerAction($id = null)
{
    $message='';
    $em = $this->container->get('doctrine')->getEntityManager();

    if (isset($id)) 
    {
        // modification d'une épreuve existant : on recherche ses données
        $epreuve = $em->find('AdminBulletinBundle:epreuve', $id);

        if (!$epreuve)
        {
            $message='Aucune épreuve trouvée';
        }
    }
    else 
    {
        // ajout d'une nouvelle épreuve
        $epreuve = new epreuve();
    }

    $form = $this->container->get('form.factory')->create(new EpreuveForm(), $epreuve);

    $request = $this->container->get('request');

    if ($request->getMethod() == 'POST') 
    {
              $form->bindRequest($request);

    if ($form->isValid()) 
    {
        $em->persist($epreuve);
        $em->flush();
        if (isset($id)) 
        {
            $message='Epreuve modifiée avec succès !';
        }
        else 
        {
            $message='Epreuve ajoutée avec succès !';
        }
    }
    }

    return $this->container->get('templating')->renderResponse(
'AdminBulletinBundle:Default:editer.html.twig',
    array(
    'form' => $form->createView(),
    'message' => $message,
    ));
}

}

Dans le lister.html.twig :

Code:

{% include 'AdminBulletinBundle:Default:liste.html.twig' %}
<a href="{{ path('Admin_Default_ajouter') }}">Ajouter une épreuve</a>

Dans le liste.html.twig :

Code:

<table cellpadding=5px>
{% for e in epreuve %}
    <tr>
    <td>{{ e.intituleEp }}</td>
    <td class="tdCentrer">{{ e.coefficientEp }}</td>
    <td class="tdCentrer">{{ e.laClasse.id }}</td>
    <td><a href="{{ path('Admin_Default_modifier', { 'id': e.id }) }}">Modifier</a></td>
    <td><a href="{{ path('Admin_Default_supprimer', { 'id': e.id }) }}">Supprimer</a></td>
{% else %}
    <tr>
    <td>Aucune épreuve n'a été trouvée.</td>
    </tr>
{% endfor %}
</table>

entité epreuve :

Code:

<?php

namespace Admin\BulletinBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Admin\BulletinBundle\Entity\epreuve
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Admin\BulletinBundle\Entity\epreuveRepository")
 */
class Epreuve
{
    /**
     * @ORM\ManyToOne(targetEntity="Admin\BulletinBundle\Entity\classe")
     * @ORM\JoinColumn(nullable=false)
     */
    private $laClasse;
    

 [...]


    /**
     * Set laClasse
     *
     * @param Admin\BulletinBundle\Entity\classe $laClasse
     */
    public function setLaClasse(\Admin\BulletinBundle\Entity\classe $laClasse)
    {
        $this->laClasse = $laClasse;
    }

    /**
     * Get laClasse
     *
     * @return Admin\BulletinBundle\Entity\classe
     */
    public function getLaClasse()
    {
        return $this->laClasse;
    }
}

dans editer.html.twig :

Code:

<h1>Ajouter une épreuve</h1>

{% if message %}
<p>{{ message }}</p>
{% endif %}

<form action="" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <input type="submit" />
</form>
<p><a href="{{ path('Admin_Default_lister') }}">Retour à la liste des épreuves</a></p>

La clé étrangère laClasse_id pose problème parce que j'ai réussi avec une les utilisateurs où il n'y avait qu'une table mais dans ce cas ci, je n'y arrive pas hmm
J'imagine qu'il y a quelque chose qui ne va pas avec cette ligne :     <td class="tdCentrer">{{ e.laClasse.id }}</td>
Je n'ai pas trouvé beaucoup d'infos sur ces erreurs alors si vous avez des idées, n'hésitez pas wink

Hors ligne

 

19/02/2013 15:35:15

Botte De Foin Publicitaire


Pied de page des forums

Powered by FluxBB
© Copyright 2008-2009 - LaFermeduWeb.net