比如我我们有一张新闻分类表,里面包含了分类编号,分类名称等基本字段
新闻信息表包含了新闻的所有信息:编号,新闻分类,标题,作者,内容等等。。
然后录入新闻的时候希望通过选择下拉列表的方式显示所有的分类(或者特定分类),
可以这么做:
1. 先通过crud生成最基本的页面控件
2. 然后把新闻分类的类型改成“entity”(见官网介绍:symfony.com/doc/current/reference/forms/types/entity.html),数据指定为对应的新闻分类entity,举例:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title','text',array('label'=>'标题'))
->add('author','text',array('label'=>'作者'))
->add('categoryId','entity',array(
'label'=>'新闻分类',
'class'=>'AcmeDemoBundle:NewsCategory',
'property'=>'name',
'data'=>$this->em->getReference("AcmeDemoBundle:NewsCategory",$options['data']->getCategoryId()),
'empty_value' => '请选择新闻分类',
)
)
->add('content','textarea',array('label'=>'文章内容'))
;
}
3. 页面引用:
{{ form_start(form) }}
{{ form_errors(form.title) }}
{{ form_errors(form.author) }}
{{ form_errors(form.categoryId) }}
{{ form_errors(form.content) }}
{{ form_end(form) }}
需要注意的地方:
1. Controller中实例化Forms的时候需要传个EntityManager 给此FomType:
$this->getDoctrine()->getManager();
'data'=>$this->em->getReference("AcmeDemoBundle:NewsCategory",
$options['data']->getCategoryId()),