2

我的问题如下。

我在表单生成器中有一个下拉列表,它成功地从数据库中检索数据。

 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'); },)) 
}

这没用。有人能告诉我为什么吗?

提前致谢。

4

2 回答 2

5

FormBuilder::add() 方法的第三个参数是一个关联的选项数组。“未关闭”不是一个有效的选项,因此它不起作用。

在您的情况下,您必须手动创建自定义集合并使用“选择”类型。为了使其工作,您必须将实体管理器注入您的表单类型。这是一个极简主义的例子:

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;
    }
}
于 2012-04-25T13:25:24.537 回答
0

实体关系在实体中进行管理,在这里您正在为一个视图构建一个表单,该表单将包含您的用户的 id 和可读名称。

提交表单后,使用上面 JF Simon 提到的 id 获取对象并提交,前提是您在实体中正确设置了所有内容,Symfony 将处理其余的事情。

于 2014-04-18T16:25:19.920 回答