繁体   English   中英

如何在Symfony 3中将表单变量从控制器操作传递到另一个变量

[英]How to pass a form variable from a controller action to another in Symfony 3

我正在使用Symfony 3尝试开发一个管理学生缺勤的网站。 当用户想要看到缺勤时,他必须给学生一个名字,以便他可以看到这个特定学生的缺勤。 用户以表格形式提供学生姓名(包含学生列表的组合框)

我正在尝试使用此表单变量(名称)来显示具有该名称的学生的缺勤情况。

这是我的代码。

在第一个动作中,我将创建一个表单,用户将在其中选择学生姓名,然后我恢复提交的值以获取该学生的ID,并且我想将此ID传递给第二个动作,在第二个动作中,我将使用id并将其显示在树枝页面中:

/**
* @Route("/absence/list/bystudent", name = "list_absence_student")
*/

public function listabsencestudentAction(Request $request)
{
    $absence = new Absence();
    $form   = $this->get('form.factory')->create(AbsenceStudentType::class, $absence);


    if($request->getMethod() == 'POST'){
        $form->handleRequest($request);
        $data = $form->getData();
    }
    if($form->isValid()){
        $id = $data->getStudent()->getID();

        return $this->redirectToRoute('list_absence_student_show',array('id', $id));
    }

    return $this->render('AbsenceBundle:Default:listabsencestudent.html.twig', array('f'=> $form->createView()));
}

这是我尝试使用上一个Action的ID来获取缺席的Action

 /**
  * @Route("/absence/list/bystudent/show", name = "list_absence_student_show")
 */

public function listabsencestudentshowAction()
{
 $absences = $this->getDoctrine()->getRepository("AbsenceBundle:Absence")->findBy('student' => $id);
           return $this->render('AbsenceBundle:Default:listabsencestudentshow.html.twig', array('absences' => $absences));
}

我在实体缺勤和学生之间有一个ManyToOne关系,因此我在缺勤实体中有一个名为Student的字段,这就是为什么我在findBy()方法中使用Student字段。

问题是在listabsencestudentshowAction()中无法识别变量$ id,我不知道如何将此形式变量从一个动作传递到另一个动作

谁能帮我这个忙。

我找到了解决问题的方法,并且想与他人分享,也许有人会需要它

为了恢复我传递的属性,我需要在第二个控制器动作的路径中添加一个子弹,然后向该动作添加参数

这是代码

第一个动作没有改变

/**
* @Route("/absence/list/bystudent", name = "list_absence_student")
*/

public function listabsencestudentAction(Request $request)
{
    $absence = new Absence();
    $form   = $this->get('form.factory')->create(AbsenceStudentType::class, $absence);


if($request->getMethod() == 'POST'){
    $form->handleRequest($request);
    $data = $form->getData();
}
if($form->isValid()){
    $id = $data->getStudent()->getID();

    return $this->redirectToRoute('list_absence_student_show',array('id', $id));
}

return $this->render('AbsenceBundle:Default:listabsencestudent.html.twig', array('f'=> $form->createView()));

}

这是第二捆

/**
 * @Route("/absence/list/bystudent/show/{id}", name = "list_absence_student_show")
 */

public function listabsencestudentshowAction(Request $request, $id)
{
    $absences = $this->getDoctrine()->getRepository("AbsenceBundle:Absence")->findBy(array('student' => $id));
    return $this->render('AbsenceBundle:Default:listabsencestudentshow.html.twig', array('absences' => $absences, 'id' => $id));

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM