簡體   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