2017-02-23 11 views
1

埋め込みMediaフォームを別のFormTypeに作成しようとしています。Symfony 2.8:埋め込みメディアFormTypeコレクションが表示されない

これは私のMediaフォームタイプです: 名前空間AdminBundle \ Form;

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\Form\Extension\Core\Type\FileType; 

    class MediaType extends AbstractType 
    { 
     /** 
     * @param FormBuilderInterface $builder 
     * @param array $options 
     */ 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
       ->add('file', 'file') 
      ; 
     } 

     /** 
     * @param OptionsResolver $resolver 
     */ 
     public function configureOptions(OptionsResolver $resolver) 
     { 
      $resolver->setDefaults(array(
       'data_class' => 'AdminBundle\Entity\Media' 
      )); 
     } 
    } 

そして、これは私の他にformTypeです:

<?php 

    namespace AdminBundle\Form; 

    use Symfony\Component\Form\AbstractType; 
    use Symfony\Component\Form\FormBuilderInterface; 
    use Symfony\Component\OptionsResolver\OptionsResolver; 

    class PegiType extends AbstractType 
    { 
     /** 
     * @param FormBuilderInterface $builder 
     * @param array $options 
     */ 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
       ->add('titre') 
       ->add('media', 'collection', array(
        'type' => new MediaType(), 
        'required' =>false, 
        'allow_add' => true, 
        'allow_delete' => true, 
        'prototype' => true, 
        'prototype_name' =>'media__name__', 

       )) 
      ; 
     } 

     /** 
     * @param OptionsResolver $resolver 
     */ 
     public function configureOptions(OptionsResolver $resolver) 
     { 
      $resolver->setDefaults(array(
       'data_class' => 'AdminBundle\Entity\Pegi' 
      )); 
     } 

     /** 
     * @return string 
     */ 
     public function getName() 
     { 
      return 'adminbundle_pegitype_files'; 
     } 
    } 

私は形でより多くのメディアを追加する必要がある場合、このようなスクリプトのJSを追加する必要があった、Web上でお読みください。

var $container; 
    var index = 0; 
    function form_allow(div, elem) { 
     $container = $('div#' + div); 



     var $lienAjout = $('<a href="#" id="ajout" class="btn">Ajouter</a>'); 
     $container.append($lienAjout); 


     $lienAjout.click(function (e) { 
      ajouterCategorie($container, elem); 
      e.preventDefault(); // évite qu'un # apparaisse dans l'URL 
      return false; 
     }); 

     index = $container.find(':input').length; 

     /*if (index == 0) { 
      ajouterCategorie($container, elem); 

     } */ 

      $container.children('div').each(function() { 
       ajouterLienSuppression($(this)); 
      }); 

    } 


function ajouterCategorie($container, elem) { 
    var $prototype = $($container.attr('data-prototype').replace(/__name__label__/g, index) 
     .replace(/__name__/g, index)); 

    ajouterLienSuppression($prototype); 

    return index++; 
} 


function ajouterLienSuppression($prototype) { 

    $lienSuppression = $('<a href="#" class="btn btn-danger">Supprimer</a>'); 


    $prototype.append($lienSuppression); 


    $lienSuppression.click(function (e) { 
     $prototype.remove(); 
     e.preventDefault(); // évite qu'un # apparaisse dans l'URL 
     return false; 
    }); 
} 

ただし、フォームに何も表示されません。 enter image description here 私の質問は:どのようにフォーム上に表示され、ライブメディアファイルの追加または削除も許可する方法です。 おそらく、私のJsファイルは注意点です。より良い解決策はありますか?

あなたの助けに感謝の

答えて

0

そこには、このようなオプションtypeはませんが、それはオブジェクトインスタンスの代わりに渡されたクラス名でなければなりません.Alsoそれはentry_typeです。

ので、代わりのと

'type' => new MediaType(), 

試してみてください。

'entry_type' => MediaType::class, 
+0

ねえ、あなたの助けのために」ありがとうございます。残念ながらそれはまだ動作しません:/ – MeursaultF

関連する問題