[英]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.