8797 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,
J'ai un problème qui me tracasse depuis des heures...En effet, j'ai une entité ELECTION qui est en ManyToOne avec les entités TYPEELECTION, SCRUTIN, NIVEAUCENTRALISATION. Bien entendu, dans l'enregistrement d'une élection, je dois choisir le typeElection auquel il appartient ainsi que le mode de scrutin et le niveau de centralisation. Quand je le fais, je reçois l'erreur suivante:

Catchable Fatal Error: Argument 1 passed to Election\SecretBundle\Entity\Election::setTypeElection() must be an instance of Election\SecretBundle\Entity\Election\SecretBundle\Entity\TypeElection, instance of Election\SecretBundle\Entity\TypeElection given, called in F:\wamp\www\Symfony\vendor\symfony\symfony\src\Symfony\Component\Form\Util\PropertyPath.php on line 537 and defined in F:\wamp\www\Symfony\src\Election\SecretBundle\Entity\Election.php line 209

Il me semble (je peux me tromper) que,lors de la validation du formulaire, au moment du traitement, il attent des objets de type respectif TYPEELECTION, SCRUTIN, NIVEAUCENTRALISATION mais il reçoît plutôt des attributs comme présidentielle , uninominal et bureau de vote respectifs des entités. à noter que pour récupérer dans la base de données et afficher ces attributs, j'ai fait ceci lors de le création des formulaires dans ElectionType

$builder
            ->add('libelle')
            ->add('date' , 'date')
            ->add('nbTour' , 'choice' , array(
               'choices' => array('1' => '1', '2' => '2'),
            ))
            ->add('nbSiege' , 'integer')
            ->add('pourcentRequis', 'percent')
            ->add('typeElection','entity',array(
                'class' => 'ElectionSecretBundle:TypeElection',
                'property' => 'libelle',
            ))
            ->add('scrutin','entity',array(
                'class' => 'ElectionSecretBundle:scrutin',
                'property' => 'libelle',
            ))
            ->add('niveauCentralisation','entity',array(
                'class' => 'ElectionSecretBundle:NiveauCentralisation',
                'property' => 'libelle',
            ))

je pense qu'il faut peut-être convertir ces attribut en objet correspondant... Si c'est le cas, comment faire? et si c'est autre chose, faites moi des propositions s'il vout plaît.
Salut,

A en juger par ton erreur, c'est juste un probleme de namespace:

a écrit :

Argument 1 passed to Election\SecretBundle\Entity\Election::setTypeElection() must be an instance of Election\SecretBundle\Entity\Election\SecretBundle\Entity\TypeElection, instance of Election\SecretBundle\Entity\TypeElection given


lorsque tu as typé l'argument de ta methode, tu as du faire ceci:


public function setTypeElection(Election\SecretBundle\Entity\TypeElection $monArg)
{
  // ...
}


mais étant déjà dans le namespace "Election\SecretBundle\Entity", tu aurai du faire soit de manière relative:


public function setTypeElection(TypeElection $monArg)
{
  // ...
}


soit de manière absolue:


public function setTypeElection(\Election\SecretBundle\Entity\TypeElection $monArg)
{
  // ...
}


Le \ au début pointe la racine des namespaces.

ou encore utiliser un use pour aliaser ta classe:


use \Election\SecretBundle\Entity\TypeElection;

public function setTypeElection(TypeElection $monArg)
{
  // ...
}


Ce qui je l'accorde, dans le cas présent n'a aucun intérêt mais s'avére utile quand on change de namespace.
Modifié par JJK801 (25 Oct 2012 - 09:50)