我尝试建立一个类别系统。我喜欢我的用户可以用类别标记。所以我放了一个数组集合和一个“ManyToMany”,但它不起作用,无论我做什么,我得到这个错误“可捕获的致命错误:类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>
提前谢谢! 克里斯托夫
答案 0 :(得分:4)
您需要添加方法
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()
方法将实体对象转换为文本...
答案 1 :(得分:0)
当实体没有__toString()
方法时,该错误总是会抛出。 Symfony组件Form
通常使用此方法为<select>
生成值。
当我使用EntityTypeField
并忘记在选项中定义属性choice_label
时,我总是遇到此错误。也许在您CategoryUserType
中使用该表单类型并忘记定义选项标签。
答案 2 :(得分:0)
我已经找到了你的两个回答的解决方案,谢谢:)
FormType: - &gt; add('category','entity',array( 'class'=&gt; “CoreBundle:类别”, 'property'=&gt; “libCategory” 'multiple'=&gt;真正, 'expanded'=&gt;真正 ))
对象用户:
/**
* @ORM\ManyToMany(targetEntity="Shootngo\CoreBundle\Entity\Category", cascade={"persist"})
* @ORM\JoinTable(name="sng_member_categories")
*/
private $category;
使用构造函数中定义的属性$ category上的ArrayCollection()。
这是有效的:D