我在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内部服务器错误-InvalidArgumentException
"My" Entity有一个列,该列使用外键约束引用"Other"的id。我希望我的表单基本上有一个下拉的形式为"我的",显示所有的值从"名称"列在"其他"实体使用其他。id -> My。
我有一个OtherType(表单类型),以下将工作:
$builder>add('name', new OtherType(), array(
'data_class' => 'My'App'DefaultBundle'Entity'Other')
)
但是这会在表单中显示整个实体。我只希望显示Other实体中的一个字段,并在选择
您没有提供所需的选项class
。
如实体字段类型
文档中所述编辑:还有两个语法问题(缺少";")
$builder->add('name', 'text')
$builder->add('other', 'entity', array(
'data_class' => 'My'App'DefaultBundle'Entity'Other'
))
使用所需的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',
))
你需要添加这个:
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'
));