2017-10-20 41 views
0

Dans le type de formulaire de symfony J'ai un FormType nomméSymfony FormType: comment obtenir un prototype sous forme fichier de type

  • KeywordType
  • MessageType
  • ReplyTextMessage
  • ReplyImageMessage

et la code à l'intérieur ressemble à ceci

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, 
     ]), 
    )] 

Questions est

Comment obtenir Prototype de ReplyTextMessageType et ReplyImageMessageType à l'intérieur MessageType

parce que je veux obtenir tous ReplyMessageType dans le form_theme

Si vous ne comprenez pas ma question, je serai là pour répondre à toute miss comprendre.

Nous vous remercions de votre avance.

+0

Question non clarifiée! S'il vous plaît essayez de réviser votre, supprimer les parties inutiles et en gras votre exigence. – Trix

+0

@Trix ah ok juste un instant –

+0

@Trix La question est mise à jour. –

Répondre

0

Résoudre le problème!

Vous devez getForm() par la fonction utilisée $builder->create() puis définissez $ que-constructeur> create() comme array et attribut défini par l'utilisation $builder->setAttribute()

Et en fonction buildView() vous obtenez juste attribuer par l'utilisation $view->vars['nameAttribute'] et faire comme mon le code de sorte que votre form_theme aura prototype

pour plus d'informations s'il vous plaît consulter mon code ci-dessous

/** 
* @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); 
    } 
}