2017-09-06 5 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)。

私はオブジェクト$ formをtaskOKActionに送信して、ユーザーがフォームに入力したものを画面に表示する必要があります。

どうすればいいですか?私はすでにstackoverflowで赤色になっています。フォームのデータをデータベースやファイルなどに格納し、URLのパラメータをオブジェクトのIDに渡すだけでよいということを尋ねる前に、私はそれはかなり良い解決だと思うが、それは私が他のオブジェクトを表示するためにURLでIDを変更していないかどうかをチェックする責任を私に追加します。

これを行うにはどうすればよいですか?あなたが実際に302リダイレクトせずにそれを行うことができ、フォームアクションから

敬具、 L.

答えて

2

には、適切に経路を注釈するを使用してください。 (あなたがルートのアノテーションを使用している場合)などの

何かが

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

あなたはパラメータが一つだけの場合も@ParamConverter一部を省略して(あなたの場合のように)示唆タイプされている場合

+0

私はrouting.ymlを使用します。私が書いたように、私はあなたのソリューションを実行しようとしました: 'パス:/タスク/ OK/{タスクは}'次 をルーティングするには、私は にコードを変更し 'ます$ this-> redirectToRoute( 'task_ok'、配列( 'タスク' を返します=> $タスク)); ' オブジェクトを送信すると、私は '警告ました:するpreg_match()は、パラメータ2は、文字列、オブジェクトgiven' :( ことを期待し、私は '@ParamConverter( "タスク"、クラス= も追加"AppBundle:Entity:Task") ' の前にtaskOKアクション。 – Lukaszy

+1

はオブジェクトを渡さず、IDだけを渡します –

0

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'テンプレートをレンダリングしたくない場合は、 'pre'テンプレートを入力してください。 –

関連する問題