2017-02-17 7 views
0

Ich habe ein Problem mit meinem FormType. Ich möchte Daten anzeigen und danke an den QueryBuilder unterscheiden. Problem beim Aufruf meiner Methode mit einem -> select ('t.nomVern') Ich habe "Warnung: spl_object_hash() erwartet Parameter 1 als Objekt, String gegeben" als Fehlermeldung.FormType & Methodenrepository

Ich verstehe nicht warum.

Meine Formtype ObservationType:

<?php 

namespace ObservationBundle\Form; 

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\DateType; 
use Symfony\Component\Form\Extension\Core\Type\HiddenType; 
use Symfony\Component\Form\Extension\Core\Type\IntegerType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Vich\UploaderBundle\Form\Type\VichImageType; 
use ImportBundle\Repository\TaxrefRepository; 
use ImportBundle\Entity\Taxref; 

class ObservationType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('date', DateType::class, array(
       'widget' => 'single_text', 
       'html5' => false, 
       'attr' => array(
        'placeholder' => 'Choisir la date de l\'observation', 
       ) 
      )) 
      ->add('latitude', TextType::class, array(
       'attr' => array(
        'placeholder' => 'Latitude ex : 31.85322' 
       ) 
      )) 
      ->add('longitude', TextType::class, array(
       'attr' => array(
        'placeholder' => 'Longitude ex : 33.55555' 
       ) 
      )) 
      ->add('nombre', IntegerType::class) 

      ->add('imageFile', VichImageType::class, array(
       'required' => false, 
       'allow_delete' => false, // not mandatory, default is true 
       'download_link' => false, // not mandatory, default is true 
       'attr' => array(
        'placeholder' => 'Votre image' 
       ) 
      )) 
      ->add('valide', HiddenType::class) 
      ->add('commentaire', HiddenType::class) 
      ->add('gpsAffiche', HiddenType::class) 
      ->add('meteo', HiddenType::class) 
      ->add('saison', HiddenType::class) 
      ->add('typeSaisie', HiddenType::class) 
      ->add('precipitation', HiddenType::class) 
      ->add('periode', HiddenType::class) 
      ->add('environnement', HiddenType::class) 
      ->add('sensibilite', HiddenType::class) 
      ->add('comportement', HiddenType::class) 
      ->add('species', EntityType::class, array(
       'label' => 'Espèce observée :', 
       'class' => 'ImportBundle\Entity\Taxref', 
       'choice_label' => 'nomVern', 
       'query_builder' => function(TaxrefRepository $qb){ 
        return $qb->distinctTaxref(); 
       } 
      )) 
     ; 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'ObservationBundle\Entity\Observation' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     return 'observationbundle_observation'; 
    } 


} 

Und mein Repository:

<?php 

namespace ImportBundle\Repository; 

use Doctrine\DBAL\Query\QueryBuilder; 
use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\Tools\Pagination\Paginator; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

class TaxrefRepository extends EntityRepository 
{ 
    /** 
    * Pagination liste des especes 
    * @param int $page 
    * @param int $max 
    * @return Paginator 
    */ 
    public function findByPage($page = 1, $max = 8) 
    { 
     if(!is_numeric($page)) { 
      throw new \InvalidArgumentException(
       '$page must be an integer ('.gettype($page).' : '.$page.')' 
      ); 
     } 

     if(!is_numeric($page)) { 
      throw new \InvalidArgumentException(
       '$max must be an integer ('.gettype($max).' : '.$max.')' 
      ); 
     } 

     $dql = $this->createQueryBuilder('t'); 
     $dql->orderBy('t.id', 'DESC'); 

     $firstResult = ($page - 1) * $max; 

     $query = $dql->getQuery(); 
     $query->setFirstResult($firstResult); 
     $query->setMaxResults($max); 

     $paginator = new Paginator($query); 

     if(($paginator->count() <= $firstResult) && $page != 1) { 
      throw new NotFoundHttpException('Page not found'); 
     } 

     return $paginator; 
    } 

    /** 
    * @return \Doctrine\ORM\QueryBuilder 
    */ 
    public function distinctTaxref() 
    { 


     return $this 
      ->createQueryBuilder('t') 
      ->select('t.nomVern') 
      ->distinct(true) 
      ->orderBy('t.nomVern', 'ASC'); 

    } 
} 

Danke im Voraus für Ihre Hilfe und sorry für mein schlechtes Englisch:/

Antwort

0

Versuchen Sie diesen Teil des Codes

return $this 
     ->createQueryBuilder('t') 
     ->select(array('t.nomVern')) 
     ->distinct(true) 
     ->orderBy('t.nomVern', 'ASC'); 
+0

Vielen Dank für die Antwort. Gleiche Fehlermeldung :( –

0

Ich glaube, dass Symfony, da Sie EntityType verwenden, ein Array von Objekten erwartet, während Sie eine einzelne Spalte auswählen, die ein Array von Strings erzeugt.

Kann versuchen Sie ein Objekt als Ganzes Auswahl:

return $this 
    ->createQueryBuilder('t') 
    ->select('t') 
    ->distinct(true) 
    ->orderBy('t.nomVern', 'ASC'); 

funktionierts?

+0

Hallo, Ich habe nicht mehr die Fehlermeldung. Auf der anderen Seite funktioniert die Unterscheidung nicht. Ich habe das gleiche Ergebnis ohne den query_builder –

Verwandte Themen