2017-10-20 15 views
0

は私がFormTypeという名前symfonyのにformTypeは:フォームタイプのファイルでプロトタイプを取得する方法をsymfonyのフォームタイプで

  • KeywordType
  • のMessageType
  • ReplyTextMessage
  • ReplyImageMes​​sage

と持っていますこのような内部のコード

KeywordType

$builder 
    ->add('messages', CollectionType::class, [ 
     'entry_type' => MessageType::class, 
     'prototype' => true, 
     'allow_add' => true, 
     'allow_delete' => true, 
     'by_reference' => false, 
    )] 

のMessageType

$builder 
    ->add('type', ChoiceType::class, [ 
     'choices' => array_flip([ 
     'text' => ReplyMessageInterface::TEXT, 
     'image' => ReplyMessageInterface::IMAGE, 
     ]), 
    )] 

質問がある

MessageType

ReplyTextMessageTypeReplyImageMessageTypeのプロトタイプを取得する方法

私はform_theme

ReplyMessageTypeのすべてを取得したいので、あなたは私の質問を理解していない場合、私はどんなミスが理解答えるためにここになります。

ありがとうございます。

+0

質問が不明です!必要な部分を削除し、必要なものを大胆にしてください。 – Trix

+0

@Trixああ、ただちに –

+0

@Trix質問が更新されました。 –

答えて

0

問題が解決しました。

あなたは使用$builder->create()機能によるgetForm()はその後、$ builder->は使用によるarrayと属性セット$builder->setAttribute()

として()を作成することを設定し、機能buildView()であなただけの使用$view->vars['nameAttribute']して属性を取得し、私のように行う必要がありますコードので、あなたのform_themeは、より多くの情報のためのプロトタイプ

を持つことになります

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('type', ChoiceType::class, [ 
      'required' => true, 
      'choices' => array_flip([ 
       'text' => self::TEXT_VALUE, 
       'sticker' => self::STICKER_VALUE, 
       'image' => self::IMAGE_VALUE, 
      ]), 
     ]) 
    ; 

    $prototypes = []; 

    $replyMessageTypes = [ 
     self::TEXT_VALUE => ReplyTextMessageType::class, 
     self::STICKER_VALUE => ReplyStickerMessageType::class, 
     self::IMAGE_VALUE => ReplyImageMessageType::class 
    ]; 

    foreach ($replyMessageTypes as $name => $type) { 
     $formBuilder = $builder->create(
      $name, $type, [] 
     ); 

     $prototypes[$name] = $formBuilder->getForm(); 
    } 

    $builder->setAttribute('replyMessageTypes', $prototypes); 
} 

/** 
* @param FormView $view 
* @param FormInterface $form 
* @param array $options 
* 
* @return mixed 
*/ 
public function buildView(FormView $view, FormInterface $form, array $options) 
{ 
    parent::buildView($view, $form, $options); 

    $view->vars['replyMessageTypes'] = []; 

    foreach ($form->getConfig()->getAttribute('replyMessageTypes') as $type => $prototype) { 
     /** @var FormInterface $prototype */ 
     $view->vars['replyMessageTypes'][$type] = $prototype->createView($view); 
    } 
} 
以下の私のコードを見てください。
関連する問題