【问题标题】:Symfony2: Expected argument of type "object", "integer" givenSymfony2:给定类型“对象”,“整数”的预期参数
【发布时间】:2012-10-11 12:41:11
【问题描述】:

我正在尝试在下拉列表中创建一个表单。数据来自实体。 问题是我得到了一个“对象”类型的预期参数,“整数”给定异常。

这是我尝试在表单中填充下拉列表的方式:

public function buildForm(FormBuilder $builder, array $options)
{
   $builder->add('country', 'entity', array(
        'class' => 'SciForumVersion2Bundle:Country',
        'property' => 'country',
    ));
}

在我的实体国家/地区,我有

/**
 * @ORM\Column(type="text")
 */
protected $country;

我在表单中编辑的对象是用户对象:

$enquiry = $this->get('security.context')->getToken()->getUser();

在用户实体中,我有

/**
 * @ORM\Column(type="integer")
 */
protected $country;

我不知道为什么会出现这个错误。

【问题讨论】:

    标签: forms symfony entity


    【解决方案1】:

    您的模型设计似乎有问题,用户的“Country”属性应该是Many-To-One association,而不是整数(这就是表单构建器抱怨的原因):

    /**
     * @ORM\ManyToOne(targetEntity="Country")
     * @ORM\JoinColumn(name="country_id", referencedColumnName="id")
     **/
    private $country;
    

    “property”选项仅用于向用户显示实体选择,Symfony2 使用“add”方法的第一个参数来决定要编辑对象的哪个字段。

    【讨论】:

    • 谢谢 Julien,我已经尝试过了,但我遇到了另一个异常: AnnotationException: [Semantical Error] The annotation "@ManyToOne" in property SciForum\Version2Bundle\Entity\User::$country 从来没有进口的。您是否可能忘记为此注释添加“使用”语句?
    • 它需要在你的模型中使用@ORM\ManyToOne 和@ORM\JoinColumn,假设你的use 语句中有ORM。
    • 没错,我想到了,但我忘了在代码中更改它,我的错。 Symfony 建议将学说路由导入为@ORM,因此您需要为路由添加前缀。我已经编辑了我的答案。
    • 非常感谢,我现在正在获取国家/地区 ID。如果可能的话,再来一个 :)。我想将国家 ID 设置为值,将国家名称设置为下拉列表的文本。我的实际配置是否可行,如果可以,请告诉我该怎么做?
    • 如果我了解您的新要求,应该已经是这样了。您能否将其添加到您的问题中(或创建一个新问题),解释您拥有什么以及您期望什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2018-07-23
    • 2017-04-11
    相关资源
    最近更新 更多