2016-05-05 6 views
0

Ich versuche ein System von Kategorien einzurichten. Ich liebe, dass meine Benutzer mit Kategorien versehen können. Also habe ich eine Array-Sammlung und ein "ManyToMany", aber es funktioniert nicht und was auch immer ich mache, bekomme ich diesen Fehler "Catachable Fatal Error: Objekt der Klasse Shoingno \ CoreBundle \ Entity \ UserCategory konnte nicht in String konvertiert werden".Symfony 2 Abfangbarer Fataler Fehler: Objekt der Klasse UserCategory konnte nicht in String konvertiert werden

Wenn mir jemand helfen könnte, ich glaube, ich werde nicht Haare, wenn ich weiterhin um eine Lösung suchen ...

  $userCategories = new ArrayCollection(); 

     foreach ($form->getCategories()->getLibCategory() as $category) { 
      $userCategories->add($category); 
     } 

     $user->addCategory($userCategories); 

Meine Formtype:

  ->add('category', CollectionType::class, array(
      'entry_type' => UserCategoryType::class, 
      'allow_add' => true, 
     )) 

Meine Ansicht:

<div class="form-group"> 
    <label class="col-sm-4 control-label">Catégories<span class="text-danger">*</span></label> 
    <div class="col-sm-6"> 
     {{ form_errors(form.category) }} 
     <ul id="category-list" data-prototype="{{ form_widget(form.category.vars.prototype)|e }}"> 
     {% for cat in form.category %} 
      {{ form_errors(cat) }} 
      <div class="form-group"> 
       {{ form_widget(cat,{'attr' : {'class' : 'form-control', 'placeholder' : "", 'data-parsley-required' : 'data-parsley-required'}}) }} 
      </div> 
     {% endfor %} 
     </ul> 
     <a href="#" id="add-another-category">Add another category</a> 
    </div> 

danke im voraus! Christophe

Antwort

3

Sie benötigen eine Methode

Shootngo\CoreBundle\Entity\UserCategory 

Entitätsklasse hinzufügen ...

public function __toString() 
{ 
    return 'My string version of UserCategory'; // if you have a name property you can do $this->getName(); 
} 

auf diese Weise, wenn die Auswahl von Optionen php verwendet automatisch die __toString() Methode erzeugt werden, um die Entity Object zu konvertieren in den Text ...

0

Dieser Fehler immer wirft auf, wenn Entität nicht __toString() Methode hat. Die Symfony-Komponente Form verwendet diese Methode häufig, um Werte für <select> zu generieren.

Ich hatte immer diesen Fehler, wenn ich EntityTypeField verwendet und in Optionen das definierte Attribut choice_label vergessen habe. Vielleicht verwenden Sie in Ihrem CategoryUserType diesen Formulartyp und vergessen das definierte Auswahllabel.

0

Nun, ich habe die Lösung mit Ihren zwei Antwort gefunden danke :)

Formtype: -> Add ('Kategorie', 'Einheit', array ( 'class' => "CoreBundle: Kategorie", 'Eigentum' => "libCategory", 'multiple' => true, 'erweitert' => true ))

Objekt Benutzer:

/** 
* @ORM\ManyToMany(targetEntity="Shootngo\CoreBundle\Entity\Category", cascade={"persist"}) 
* @ORM\JoinTable(name="sng_member_categories") 
*/ 
private $category; 

Mit dem Arraycollection() auf Attribut $ Kategorie im Konstruktor definiert.

Und das funktioniert: D