【问题标题】:Symfony 2 : Form on an object, not a mapped EntitySymfony 2:对象上的表单,而不是映射的实体
【发布时间】:2014-04-09 06:00:55
【问题描述】:

我正在尝试将我的 formType 映射到一个自定义对象上,该对象没有持久化或其他任何东西..

所以我设置了data_class,但出现以下错误:

Class "CDA\SvBundle\Lib\ImportContact\Contact" 似乎不是托管 Doctrine 实体。你忘记映射了吗?

所以我没有忘记映射它,那是故意的......

这是我正在使用的类型

class ImportContactType extends \Symfony\Component\Form\AbstractType
{
    public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options)
    {
        $builder->add('contacts', 'entity', array('class' => "CDA\SvBundle\Lib\ImportContact\Contact"));
    }

    public function getName()
    {
        return 'importContact';
    }
    public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'CDA\SvBundle\Lib\ImportContact\ImportContact',
        ));
    }
}

【问题讨论】:

标签: forms symfony object entity


【解决方案1】:

entity FormType 是一个 Doctrine FormType,它需要一个实体作为 class(它从 ORM 加载值)。您应该改用 choice 类型。

所以问题不是来自 data_class,而是来自contacts 表单字段。

编辑:错误消息提到的是联系人,而不是 ImportContact,是吗?

【讨论】:

  • 这就是我所期待的......!但是使用我的实体作为选择的最佳方式是什么?我应该使用buildForm 的选项吗?
  • 使用 FormType 的选项 'choice_list' 并用您的实体填充它。
  • 我的意思是,将它传递给 formType 的最佳做法是什么:在构造函数中,添加一个选项,或者..?
  • 传递给__construct,设置一个类变量,在buildForm中使用。也许不是最好的方法,但清晰且实用。
  • 这就是我所做的,但是如何检查表单是否有效?因为,在表单发布到的操作中,它没有检索联系人对象的元素(它们是使用 google oauth API 检索的),所以我不能将它传递给构造函数。所以我的表单不是t 有效,因为没有定义“choice_list”。这就是为什么我在寻找与“实体”相同的字段,它可以根据 php 对象识别发送的数据是否有效。
猜你喜欢
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 2022-01-23
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多