2017-01-01 13 views
0

私は単純なSymfony3フォームを持っていますが、期待通りに、フォームがGETされるときにフォーム名を含む醜いURLを生成します。このような何か:フォームの送信時にURLからフォーム名を削除するにはどうすればよいですか?

...php?party_form%5Bplace%5D=Milan&party_form%5Bdate%5D=01%2F01%2F2017&party_form%5Bsave%5D=&party_form%5B_token%5D=KMN745JpTUyZZQSRnP5kd6YHQnQhAlU9eHtMwZ-zi7g 

私はparty_formがURLから削除したいと思います。

class PartyForm extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->setMethod('GET') 
      ->add($builder 
       ->create('place', TextType::class) 
       ->addModelTransformer(new CallbackTransformer(
        function ($placesAsArray) { 
         // transform the array to a string 
         if ($placesAsArray) { 
          return implode(', ', array_values($placesAsArray)); 
         } 
        }, 
        function ($placesAsString) { 

         // transform the string back to an array 
         $rawPlaceArray = explode(', ', $placesAsString); 

         // If the place doesn't have city, province and country don't search for it. 
         // validation constraints on place will throw an error. 
         if (count($rawPlaceArray) == 3) { 
          $keys = array('city', 'province', 'country'); 
          return array_combine($keys, $rawPlaceArray); 
         } 
        } 
       )) 

      ) 
      ->add('date', DateType::class, 
        array(
         'widget' => 'single_text', 
         'format' => 'dd/MM/yyyy', 
       ) 
      ) 
      ->add('save', SubmitType::class, 
        array(
         'label' => 'Find List', 
       ) 
      ); 

    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Frontend\Event', 
      'required' => false 
     )); 
    } 

    // This function was to be ovveridden 
    public function getBlockPrefix() 
    { 
     return null; 
    } 

しかし、今のフォームはヌルフィールドで提出される:私は、以下の変更を行っthis質問後

!私はここで何が欠けていますか?

+0

私は(あなたがするリンクの答えから解決策である)あなたの例では、私は第二の回答を参照して – Dekel

+0

@DekelをcreateNamedBuilder' 'のいずれかの使用方法が表示されませんsymfony3と一緒に行く方法です。 – tutak

+1

私は、URLをもっと綺麗にしたいという欲求を理解することができますが、サイトの多くにははるかに醜いものがあります。いずれにせよ、ブルートフォースの解決策はフォームをPOSTして、コントローラにかなりのURLを生成してリダイレクトすることです。フォームクラスを自分自身の振る舞いにしようとすると、あなたは盲目になります。 – Cerad

答えて

1

で試してみてください:

// This function was to be ovveridden 
public function getBlockPrefix() 
{ 
    return ''; 
} 
+0

これは適切なソリューションだと思います。symfonyは完全な名前を設定するためにprefix + form-fieldのようなことを行います。ヌル値を使用する場合はnull値に文字列を追加します。したがって、nullのままです。 – Nickolaus

+0

getBlockPrefix )この方法であっても私の質問で言及したものであれ、symfonyが自動的に作成するフォーム要素のidは変わるでしょう。だから、潜在的にあなたのスタイルとJavaScriptコードのいくつかを壊す可能性があります。 – tutak

関連する問題