Symfony 2.8:不显示嵌入式媒体FormType集合

时间:2017-02-23 11:27:48

标签: php forms symfony media

我尝试在另一种FormType中创建嵌入式媒体表单。

这是我的媒体表格类型: 命名空间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';
        }
    }

如果我需要在表单中添加更多媒体,我在网上阅读,有必要添加这样的脚本:

    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文件是一个解决方案。有更好的解决方案吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

没有这样的选项type,但它是enter image description here。它也应该是传递的类名而不是对象实例。

所以而不是

'type' => new MediaType(),

尝试:

'entry_type' => MediaType::class,