Symfony 3:如何在一个表单

时间:2016-09-15 07:26:06

标签: symfony symfony-forms

Symfony 3.1.3版

我使用名为 Classes 的实体创建了一个下拉列表,您可以在下面看到Controller,

public function studentAddClassAction( $id, Request $request )
{
    // get the student from the student table
    $em     = $this->getDoctrine()->getManager();
    $user   = $em->getRepository('PIE10Bundle:Users')->find($id);

    // new class object and create the form
    $classes= $em->getRepository('PIE10Bundle:Classes')->findAll();
    $form   = $this->createForm(ClassType::class, $classes);
    $form->handleRequest($request);

    if( $form->isSubmitted() && $form->isValid() )
    {
        // form submit operations
    }

    return $this->render(
                        'PIE10Bundle:student:layout_student_addclass.html.twig',
                        array(
                            'user'  => $user,
                            'title' => 'Add Class',
                            'tables'=> 1,
                            'form'  => $form->createView()
                        )
    );
}

并且 ClassType 位于

之下
class ClassType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('classes',
                      EntityType::class,
                      array('class'     => 'PIE10Bundle:Classes',
                            'expanded'  => false,
                            'multiple'  => false,));
        $builder->add('Add Class',
                      SubmitType::class,
                      array('attr'  =>  array('class' => 'btn btn-primary',
                                              'style' => 'margin:15px 0;')) );
    }
}

这很好用,它提供了数据库中的所有类。我还有另一个名为用户的实体,它有一个名为 roles 的列(DC2Type:array),它有一个名为ROLE_PARENT的角色,我可以检索所有父母使用以下查询

$query = $this->getDoctrine()->getEntityManager()
                    ->createQuery('SELECT u FROM PIE10Bundle:Users u WHERE u.roles LIKE :role')
                    ->setParameter('role', '%"ROLE_PARENT"%' );
$users = $query->getResult();

我的问题是如何将这些父母列表作为选择列表添加到 studentAddClassAction 控制器中的上述表单中。

请告知我所需的任何其他信息。

1 个答案:

答案 0 :(得分:1)

要将一组自定义实体作为选项列表,您需要使用a query_builder option

所以它看起来像

$builder->add('parent',
    EntityType::class,
    array('class'     => 'PIE10Bundle:Users',
        'expanded'  => false,
        'query_builder' =>  function (EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->where('u.roles LIKE :role')
                ->setParameter('role', '%"ROLE_PARENT"%');
         },
         'multiple'  => false
));