Symfony 2可捕获的致命错误:类UserCategory的对象无法转换为字符串


Symfony 2 Catchable Fatal Error: Object of class UserCategory could not be converted to string

我试图建立一个类别系统。我喜欢我的用户可以使用类别进行标记。所以我放了一个数组集合和一个"ManyToMany",但它不起作用,无论我做什么,我都会得到这个错误"可捕获的致命错误:Shootngo''CoreBundle''Entity''UserCategory类的对象无法转换为字符串"。

如果有人能帮助我,我想如果我继续寻找解决方案,我就不会有头发了。。。

           $userCategories = new ArrayCollection();
        foreach ($form->getCategories()->getLibCategory() as $category) {
            $userCategories->add($category);
        }
        $user->addCategory($userCategories);

我的表单类型:

            ->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()方法将实体对象转换为文本。。。

当实体没有__toString()方法时,总是会出现此错误。Symfony组件Form经常使用此方法为<select>生成值。

当我使用EntityTypeField并且忘记在选项中定义属性choice_label时,我总是遇到这个错误。也许在CategoryUserType中,您使用了该表单类型,却忘记了定义选择标签。

好吧,我已经找到了你的两个答案的解决方案,谢谢:)

表单类型:->add("类别"、"实体"、数组('class'=>"核心捆绑包:类别",'property'=>"libCategory","multiple"=>true,'expanded'=>true))

目标用户:

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

在构造函数中定义了属性$category上的ArrayCollection()。

这是有效的:D