Я стараюсь создать систему категорий. Мне нравится, что мои пользователи могут отмечать категориями. Поэтому я поместил 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
вам нужно добавить метод
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 в текст …
Эта ошибка всегда возникает, когда объект не имеет __toString()
метод. Компонент Symfony Form
часто используют этот метод для генерации значений для <select>
,
У меня всегда была эта ошибка, когда я использовал EntityTypeField
и забыл определенный атрибут choice_label
в опциях. Может быть, в вашем CategoryUserType
Вы используете этот тип формы и забыли определить метку выбора.
Ну, я нашел решение с вашим ответом спасибо 🙂
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