如何在表单生成器symfony2中使用数组作为“选择”的选项

时间:2015-06-29 03:12:54

标签: php arrays forms symfony twig

嗨,我是symfony2的新手。而且我很难搞清楚如何处理我的选择框。我需要使用数据库中的“位置”数组,并将其用作我的选择框的选项。由于这个项目即将到期,我真的很感谢你们的任何帮助。

Atm我的表单设置有以下代码:

        $role = $query1->getResult(Query::HYDRATE_ARRAY);

        $roles = array();
        for($i = 0; $i <count($roles); $i++){
            $roles[] = $role[$i]['disrole'];
        }

        $form = $this->createFormBuilder($position)
            ->add('position', 'choice', array('choices'  => $roles))
            ->add('save', 'submit', array('label' => 'Search'))->setMethod('POST')
            ->getForm();

以下是我在twig模板中使用它的方法:

<div class="panel-body">
   {{ form(form) }}
</div>

我只是输出我的表单,因为我不太熟悉拼接表单部分。我非常感谢你的回答!提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用entity field代替选择字段,Date Picker JS API是一个选择字段,用于从Doctrine加载其选项:

$form->add(
    'position',
    'entity',
    [
        'class' => 'YourBundle:Role',
        'query_builder' => function (RoleRepository $repository) {
            $queryBuilder = $repository->createQueryBuilder('role');
            // create your query here, or get it from your repository
            return $queryBuilder;
        },
        'choice_label' => 'disrole'
    ]
);

答案 1 :(得分:0)

要使用表单中的选项,我会使用以下可能性:

/**
 * @param FormBuilderInterface $builder
 * @param array                $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('stuff', 'choice', ['choices' => $this->getChoices()]);
}


private function getChoices()
{
    $contents = $this->someRepoInjectedInForm->findChoices();

    $result = [];
    foreach ($contents as $content) {
        $result[$content->getId()] = $content->getLabel();
    }

    return $result;
}

您的选择标签将是数组值,通过表单发送到后端的值将是数组中相应键值对的键。