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