Исправляемая фатальная ошибка Symfony 2: объект класса UserCategory не может быть преобразован в строку

Я стараюсь создать систему категорий. Мне нравится, что мои пользователи могут отмечать категориями. Поэтому я поместил Array Collection и «ManyToMany», но он не работает, и что бы я ни делал, я получаю эту ошибку «Catchable Fatal Error: Объект класса Shootngo \ CoreBundle \ Entity \ 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

0

Решение

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

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 в текст …

4

Другие решения

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

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

0

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

FormType:
-> добавить («категория», «сущность», массив (
‘class’ => «CoreBundle: Category»,
‘property’ => «libCategory»,
‘множественный’ => правда,
«расширенный» => правда
))

Пользователь объекта:

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

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

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

0