2016-05-05 5 views
0

Я пытаюсь создать систему категорий. Мне нравится, что мои пользователи могут отмечать категории. Поэтому я поместил коллекцию Array и «ManyToMany», но она не работает, и что бы я ни делал, я получаю эту ошибку «Catchable Fatal Error: Object of class Shootngo \ CoreBundle \ Entity \ UserCategory не может быть преобразован в строку».Symfony 2 Catchable Fatal Error: Объект класса UserCategory не может быть преобразован в строку

Если кто-то может мне помочь, я думаю, что я не буду иметь волосы, если я продолжать искать решение ...

  $userCategories = new ArrayCollection(); 

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

     $user->addCategory($userCategories); 

Мой FormType:

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

Мой Вид:

<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> 

благодарю заранее! Christophe

ответ

3

вам нужно добавить метод

Shootngo\CoreBundle\Entity\UserCategory 

класса сущностей ...

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

таким образом, когда выбора параметров в настоящее время автоматически генерируется PHP использует __toString() метод для преобразования объекта Entity в текст ...

0

Эта ошибка всегда срабатывает, когда объект не имеет метода __toString(). Компонент Symfony Form часто использует этот метод для генерации значений для <select>.

У меня всегда была эта ошибка, когда я использовал EntityTypeField и забыл определенный атрибут choice_label в настройках. Возможно, в вашем CategoryUserType вы используете этот тип формы и забудьте указать метку выбора.

0

Ну, я нашел решение с вашими двумя ответами спасибо :)

FormType: -> добавить ('категорию', 'объект', массив ( 'класс' => "CoreBundle: Категория", 'свойство' => "libCategory", 'мультипликатор' => правда, 'расширена' => верно ))

Объект пользователя:

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

с ArrayCollection() на атрибуте $ категории, определенной в конструкторе.

И это работает: D