2017-01-03 2 views
0

ユーザーのプロファイルページにリダイレクトするユーザー名でプロファイルを検索するためのフォームを作成したいと考えています。 Btw、私はSymfony 3.2を使用しています。Symfony GETフォームをパラメータ付きの経路にリダイレクトする方法は?

私はこれを行うための自然な方法はGETアクションフォームであると考えています。それは、顧客がプロフィールを見るために良いユーザー名でURLを直接変更することさえ可能にします。このコードは、次のエラーメッセージにつながる

//... 

/** @Route("/profil/search", name="profil_search") */ 
public function searchAction() {   
    $builder = $this->createFormBuilder(); 
    $builder     
     ->setAction($this->generateUrl('profil_show')) 
     ->setMethod('GET') 
     ->add('username', SearchType::class, array('label' => 'Username : ')) 
     ->add('submit', SubmitType::class, array('label' => 'Search')); 
    $form = $builder->getForm(); 

    return $this->render('profils/profil_search.html.twig', [ 
     'form' => $form->createView(), 
    ]); 
} 

/** @Route("/profil/show/{username}", name="profil_show") */ 
public function showAction($username) {  
    $repository = $this->getDoctrine()->getRepository('AppBundle:User'); 
    $searchedUser = $repository->findOneByUsername($username); 

    return $this->render('profils/profil_show.html.twig', [ 
     'searchedUser' => $searchedUser, 
    ]); 
} 

//... 

ProfileController.php:

いくつかの必須パラメータが欠落している(ここで

は私のコントローラのコードです"username") route "profil_show"のURLを生成します。

私は徹底的にdocumentationを読んで私は、パラメータとしてprofil_showルートにusername変数を渡すことができますか、推測することができませんでしたか?

私のやり方が良いものではない場合は、コメントしてくれてありがとうが、私はまだGETフォームの使い方を知りたいと思う。

EDIT:@MEmersonの答えに

おかげで、私は今、それを得ます。だから、私のような将来の初心者のために、ここで私はそれをやった方法です:あなたは、エラーメッセージを見てみる場合は

/** @Route("/profil/search", name="profil_search") */ 
public function searchAction(Request $request) {  
    $data = array(); 
    $builder = $this->createFormBuilder($data); 
    $builder     
     //->setAction($this->generateUrl('profil_show')) 
     //->setMethod('GET') 
     ->add('username', SearchType::class, array('label' => 'Username : ')) 
     ->add('submit', SubmitType::class, array('label' => 'Search')); 
    $form = $builder->getForm(); 

    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 
     $data = $form->getData(); 
     return $this->redirectToRoute('profil_show', array('username' => $data["username"])); 
    } 

    return $this->render('profils/profil_search.html.twig', [ 
     'method' => __METHOD__, 
     'form' => $form->createView(), 
     'message' => $message, 
    ]); 
} 

答えて

1

それはあなたがパス「profil_show」のURLを生成しようとしているところに問題があることを言います。

お使いのコントローラの注釈は、URLがユーザー名

/** @Route("/profil/show/{username}", name="profil_show") */ 

これはsymfonyはルートのhttp://yoursite.com/profil/show/username期待していることを意味して移入されている必要があります。あなたが本当にそれを掲示GETフォームがhttp://yoursite.com/profil/show?username

を期待しなければならないとして、それを渡したい場合しかし、あなたは2番目のルートを追加したり、問題を解決する必要があり

/** @Route("/profil/show", name="profil_show_search") */ 

であるためにあなたの既存のルートを変更することができます。

+0

ありがとう、私は今理解しています。私はGETメソッドがあなたの最初のリンクのようにルーティングすることができるだろうと思った。私はPOSTに固執して、送信時にコントローラにリダイレクトします。 –

関連する問題