我尝试在另一种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;
});
}
但表格上没有任何内容。
所以我的问题是:如何在表单上显示它,并允许添加或删除实时媒体文件。
也许我的Js文件是一个解决方案。有更好的解决方案吗?
感谢您的帮助