2017-10-20 40 views
0

在symfony的表單類型我有一個FormType名爲Symfony的FormType:如何在形式類型的文件拿到的樣機

  • KeywordType
  • 消息類型
  • ReplyTextMessage
  • ReplyImageMes​​sage

和裏面的代碼看起來像這樣

KeywordType

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

消息類型

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

問題是

如何獲得的ReplyTextMessageTypeReplyImageMessageType原型內MessageType

,因爲我想獲得的所有ReplyMessageTypeform_theme

如果你不明白我的問題,我會在這裏回答任何小姐明白。

謝謝你的提前。

+0

不清楚的問題!請嘗試修改您的,刪除不必要的部分,並大膽您的要求。 – Trix

+0

@Trix啊好的只是片刻 –

+0

@Trix問題已更新。 –

回答

0

問題解決!

您必須getForm()通過使用$builder->create()功能,然後設置$ builder->使用$builder->setAttribute()

而且在功能buildView()你只能使用$view->vars['nameAttribute']屬性創建()爲array,並設置屬性和不喜歡我的代碼,以便您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); 
    } 
}