2017-02-23 8 views
1

다른 미디어 유형에 임베디드 미디어 양식을 만들려고합니다.Symfony 2.8 : 임베디드 미디어 FormType 컬렉션이 표시되지 않습니다.

이것은 내 미디어 Formtype입니다. namespace 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를 추가 할 필요가 있었다 :

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을합니다.

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

이봐, 당신의 도움에 대한 '감사합니다와

그래서 대신

'type' => new MediaType(), 

는보십시오. 불행히도 여전히 작동하지 않습니다. / – MeursaultF