2015-07-13 82 views
0

我在Symfony中创建了一个表单类型,它扩展了抽象类型,并使用构建器添加了字段,但无论我做什么都行不通!Symfony2表单构建器添加实体'无法加载类型实体'

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内部服务器错误 - InvalidArgumentException

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

更新

我有一个OTHERTYPE(表型)和下面的工作:

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

但是,这显示在表格整个实体。我只希望显示来自其他实体的一个字段,并在下拉列表中选择

回答

0

您没有提供所需的选项class

由于在文件中提到的entity Field Type

编辑:

而且你有两个语法问题( “;” 丢失)

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

的语法只是一个错字。但是课程提供.....? – iswinky

+0

不,你提供'data_class'选项而不是'class'。尝试用'class'替换'data_class' – zilongqiu

+0

对不起,您发布我最初发布的内容时有点困惑。一个更正的版本会更好!谢谢,但它仍然错误! – iswinky

0

使用需要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', 
)) 
0

你需要补充一点:data_class下面几行

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

,并切换到class

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

我仍然收到同样的错误。 – iswinky