【问题标题】:Symfony2 Form builder add entity 'Could not load type entity'Symfony2 表单生成器添加实体“无法加载类型实体”
【发布时间】:2015-07-13 13:45:14
【问题描述】:

我在 Symfony 中创建了一个扩展抽象类型的表单类型,并使用构建器添加了字段,但无论我做什么它都不起作用!

class MyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'text');
        $builder->add('other', 'entity', array(
            'data_class' => 'My\App\DefaultBundle\Entity\Other'
        ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'runSpeeds' => 'My\App\DefaultBundle\Entity\My',
        ));
    }

    public function getName()
    {
        return 'my';
    }
}

无法加载类型“实体”500 内部服务器错误 - 无效参数异常

“我的”实体有一列使用外键约束引用“其他”的 id。我希望我的表单基本上在“我的”表单中有一个下拉菜单,它使用 Other.id -> My.other_id 作为参考显示“其他”实体中“名称”列中的所有值。

更新

我有一个 OtherType(表单类型),以下内容将起作用:

$builder>add('name', new OtherType(), array(
    'data_class' => 'My\App\DefaultBundle\Entity\Other')
)

但这会在表单中显示整个实体。我只希望显示来自其他实体的一个字段,并在带有选项的下拉列表中显示

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    您没有提供所需的选项class

    entity Field Type的文档中所述

    编辑:

    此外,您还有两个语法问题(缺少“;”)

    $builder->add('name', 'text')
    $builder->add('other', 'entity', array(
        'data_class' => 'My\App\DefaultBundle\Entity\Other'
    ))
    

    【讨论】:

    • 不,您提供的是data_class 选项,而不是class。尝试用class替换data_class
    • 抱歉,您发布我最初发布的内容让您有点困惑。修正版会更好!谢谢,但它仍然错误!
    • 感谢您的回答。或许this post可以帮到你。
    【解决方案2】:

    使用必需的class属性,如基本用法http://symfony.com/doc/current/reference/forms/types/entity.html#basic-usage中定义的那样

    $builder->add('other', 'entity', array(
        'class' => 'DefaultBundle:Other'
    ))
    

    如果您的 Other 类实现了 __toString() 方法,您可以使用它来确定标签。你也可以使用property

    $builder->add('other', 'entity', array(
        'class' => 'DefaultBundle:Other',
        'property' => 'name',
    ))
    

    【讨论】:

      【解决方案3】:

      你需要添加这个:

      public function setDefaultOptions(OptionsResolverInterface $resolver)
      {
          $resolver->setDefaults(array(
              'data_class' => 'My\App\DefaultBundle\Entity\My'
          ));
      }
      

      并在以下几行中将data_class 更改为class

          $builder->add('other', 'entity', array(
              'data_class' => 'My\App\DefaultBundle\Entity\Other'
          ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-16
        • 2016-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        • 2016-03-08
        • 2013-05-28
        相关资源
        最近更新 更多