我的问题如下。
我在表单构建器中有一个下拉列表,它成功从数据库中检索数据。
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('Statusname', 'entity', array('empty_value' => 'All','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },))
}
工作正常。 但是当我添加自定义数据时
'not closed' => 'Not closed'
进入下拉列表,即
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('Statusname', 'entity', array('empty_value' => 'All','not closed' => 'Not closed','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },))
}
它不起作用。有人可以告诉我为什么吗?
提前致谢。
答案 0 :(得分:5)
FormBuilder :: add()方法的第三个参数是一个asoociative数组选项。 “未关闭”不是有效选项,因此无效。
在您的情况下,您必须手动创建自定义集合并使用“选择”类型。 为了使其工作,您必须将实体管理器注入表单类型。 这是一个极简主义的例子:
class IssueType extends AbstractType
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('Statusname', 'choice', array(
'empty_value' => 'All',
'required' => false,
'choices' => $this->buildStatusNames(),
)
}
private function buildStatusNames()
{
$choices = array();
$types = $this
->entityManager
->getRepository('MyProject\EntityBundle\Entity\IssueStatusType')
->createQueryBuilder('es')
->orderBy('es.name', 'ASC')
->getQuery()
->getResult();
foreach ($types as $type) {
// I assume key is retrieved by getId
$choices[$type->getId()] = $type->getName();
}
$choices['not closed'] = 'Not closed';
return $choices;
}
}
答案 1 :(得分:0)
实体关系在实体内进行管理,在这里您要为视图构建一个表单,该表单将包含您的用户的ID和可读名称。
提交表单时,使用ID抓取对象,如上面提到的JF Simon提交的那样,只要您在实体中正确设置了所有内容,Symfony将负责其余的工作。