2016-12-20 17 views
1

symfony3でcreateForm methodeを使用してコントローラのカスタムフォームタイプにパラメータを渡すにはどうすればよいですか? BannerController.phpで警告:BannerType :: __ construct()の引数1がありません

public function __construct($type){ 
    $this->type = $type; 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Banner\BannerBundle\Entity\Banner', 
     'type' => null, 
    )); 
} 

$form = $this->createForm(BannerType::class, $entity, array(
    'typee' => $type, 
)); 
+1

createFormパラメータに 'type'ではなく 'typee'を入力しています。 – Starspire

+1

ありがとうございますが、タイプミスです 影響がありません – mahdi

答えて

0

オブジェクトが作成されるときには、任意の引数を渡すされていない パラメータは、 "タイプ" BannerType.phpで です。だからあなたはこのメッセージを受け取りました。 buildFormメソッドで使用可能なoptions変数から取得できるtypeパラメータ。ここで

は、フォームクラスの例です:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $myType = $options['type']; 
    if ($myType == NULL){ 
     // TODO: 
    } 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Banner\BannerBundle\Entity\Banner', 
     'type' => null, 
    )); 
} 
0

あなたの質問への答えはStackOverflowの上にすでに存在でした。 hereを読むことができます。Symfony 2.8から文字列FormType::classをオブジェクトのインスタンスではなくcreateFormメソッドに渡す必要があるため、この文字列はパラメータなしで後でコンストラクタとして処理されるため、__construct関数を削除する必要があると思います。そして、それが動作するはずです:)

0

をあなたはFormTypeのコンストラクタにいくつかの引数を渡すとcreateFormを経由して、それをインスタンス化することができるようにしたいときは、このような適切なform.typeタグをサービスとして登録する必要があります。

# src/AppBundle/Resources/config/services.yml 
services: 
    app.form.type.banner: 
     class: AppBundle\Form\Type\BannerType 
     arguments: 
      - '%type%' 
     tags: 
      - { name: form.type } 

しかし、これはあなたが実際に意味がありません。何をしたいのか

唯一の他のサービスであるサービスコンテナで使用可能な引数、パラメータなどを渡すことができます。 FormTypeクラスのコンストラクタでパラメータを取得することは期待できませんが、コンストラクタの引数ではなくオプションをとるように設計されたcreateForm()の3番目の引数を渡します。あなたは間違ったやり方でそれをやろうとしているように見えますが、より多くのコードを用意し、どのようにすればよいか教えてください。

関連する問題