2016-03-19 9 views
0

アプリケーションでいくつかのパラメータを選択できるようにする必要があります。そこで私はフォームを作成しました。年を選択します。symfony2:フォームでurlルートパラメータを変更する

フォームの動作をGETに変更し、namenullに変更しました。フォームが送信されると、URLに古典的なurl-query-string-parameterが追加されます。

しかし、私はsymfony-routesを使用していますので、フォームを送信した結果がルートパラメータを変更するようにしたいと思います。ここで

は、明確化のための一例である:私はこの1つのようなルートを使用したいとします

@Route("/assignment/{year}", name="assignment") 
function indexAction($year){...} 

その後、私はこのようなフォームを送信を通じて年間のルート・パラメータを変更したいと思います。

$this->get('form.factory').createNamedBuilder(null, FormType::class) 
    ->setAction('get') 
    ->add('year', ChoiceType::class, ['choices' => [2016 => 2016, 2022 => 2022]]) 
    ->add('submit', SubmitType::class); 

余分なjavascriptを追加せずにこれをアーカイブする方法はありますか? これをアーカイブできない場合は、どのような方法を選択するのが最適ですか? route-parameterを削除し、フォームデータを "手動で"扱うだけですか?

+0

なぜこのフォームが必要ですか? 1つ以上のパラメータがない限り、ドロップダウン・アラート・ブートストラップを使用し、適切な年のリンクを各 'a'要素に追加する方がよいでしょう。 –

答えて

0

フォームが/assignment/{year}ルート上にある場合は、これが考えられる可能性があります。

indexAction()の機能では、フォームが送信されているかどうかを確認し、そうであればフォームで選択された年のルートにリダイレクトし直すことができます。

//SomethingController.php 
public function indexAction($year, Request $request) 
{ 
    //... 
    $form = $this->get('form.factory'). // You know the rest 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 

     // Do some stuff depending on values of form if you'd like, and then 

     $this->redirectToRoute('assignment', ['year' => $year]); 
    } 
} 
関連する問題