2017-09-06 25 views
0

這是我簡單的代碼如何使用redirectToRoute正確傳遞對象?

 
class LuckyController extends Controller 
{ 
    public function taskFormAction(Request $request) 
    { 
     $task = new Task(); 
     //$task->setTask('Test task'); 
     //$task->setDueDate(new \DateTime('tomorrow noon')); 

     $form = $this->createFormBuilder($task) 
      ->add('task', TextType::class) 
      ->add('dueDate', DateType::class) 
      ->add('save', SubmitType::class, array('label' => 'Save')) 
      ->getForm(); 

     $form->handleRequest($request); 

     if($form->isSubmitted() && $form->isValid()) 
     { 
      $task = $form->getData(); 

      return $this->redirectToRoute('task_ok', array('task' => '123')); 
     } 

     return $this->render('pre.html.twig', array('pre' => print_r($task, true), 'form' => $form->createView())); 
    } 

    public function taskOKAction(Task $task) 
    { 
     return $this->render('ok.html.twig', array('msg' => 'ok', 'task' => print_r($task, true))); 
    } 
} 

這行

return $this->redirectToRoute('task_ok', array('task' => '123'));

使得重定向到taskOKAction,但它讓我只是URL發送參數(?=任務123)。

我需要發送的對象$任務taskOKAction打印在屏幕上鍵入的形式是什麼用戶。

我該怎麼做?我已經上衝計算器詢問得知,好的解決方案是將數據從存儲形式之前(例如,在數據庫或文件),只是傳遞參數的URL對象的ID。我認爲這是相當不錯的解決方案,但它增加了我的責任,以檢查用戶是否未更改URL中的ID以顯示其他對象。

這樣做的最好方法是什麼?

最好的問候, L.

回答

2

使用parameter converter正確註釋路線

喜歡的東西(如果你使用的路線註釋)

/** 
* @Route("/task/ok/{id}") 
* @ParamConverter("task", class="VendorBundle:Task") 
*/ 
public function taskOKAction(Task $task) 

您也可以省略@ParamConverter的一部分,如果參數是唯一的一個,如果(在你的情況下)型暗示

+0

我使用routing.yml。我試圖做你的解決方案,所以我寫道: '路徑:/任務/ OK/{任務}'路由 接下來,我改變了代碼 '返回$這個 - > redirectToRoute(「task_ok」,陣列(「任務」 => $任務));' 發送對象和我 '警告:的preg_match()預計參數2是串,對象given' :( 我還 '@ParamConverter( 「任務」 加入,類= 「的appbundle:實體:任務」)' 前taskOK行動 – Lukaszy

+1

不及格的對象,只是ID –

0

從你的表單操作,你可以不用實際的302重定向:

public function taskFormAction(Request $request) 
{ 
    $task = new Task(); 
    //$task->setTask('Test task'); 
    //$task->setDueDate(new \DateTime('tomorrow noon')); 

    $form = $this->createFormBuilder($task) 
     ->add('task', TextType::class) 
     ->add('dueDate', DateType::class) 
     ->add('save', SubmitType::class, array('label' => 'Save')) 
     ->getForm(); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()) 
    { 
     $task = $form->getData(); 
     return $this-taskOKAction($task) 
    } 
} 

這是完全合法的,和你的同事前端會感謝你缺乏重定向。

+0

你怎麼了像這樣做驗證並註冊到數據庫? –

+0

@ T-N-Y我複製從提問一些背景代碼到我的答案清晰。 – svgrafov

+0

這是錯的,他不希望在提交表單之前呈現「OK」的模板,他想「前」模板 –