ユーザーのプロファイルページにリダイレクトするユーザー名でプロファイルを検索するためのフォームを作成したいと考えています。 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,
]);
}
ありがとう、私は今理解しています。私はGETメソッドがあなたの最初のリンクのようにルーティングすることができるだろうと思った。私はPOSTに固執して、送信時にコントローラにリダイレクトします。 –