2016-09-15 111 views
0

Symfony的版本3.1.3Symfony的3:如何在一个形式

我已经使用的实体,称为,你可以看到下面的控制器中创建一个下拉列表中,使用两个选择/下拉菜单中的两个表中

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() 
         ) 
    ); 
} 

类类别低于

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

而这个工作正常,它提供了数据库中的所有类。此外,我还有一个实体,称为用户,它有一个叫列角色(DC2Type:数组),它有一个角色叫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控制器中。

请让我知道这是需要的任何其他信息。

+0

是'User'和'Classes'通过多对多映射,并且要在这种形式只是为了创建它们之间的联系?换句话说,将User分配给Class? –

+0

是的,我想为用户分配Class和Parents,他们将被存储在一个名为** students **的单独表中,它有三列ClassID,ParentID和UserID。所以我想为父母添加另一个选择列表。 – mapmalith

回答

1

要有实体的自定义设置,你需要使用​​

一个选择列表,所以它看起来像

$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 
)); 
+0

是的,这对我有用,而且我已经添加了''choice_label'\t =>'username''来避免选项中的列表用户ID :)) – mapmalith