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;
});
}
ただし、フォームに何も表示されません。 私の質問は:どのようにフォーム上に表示され、ライブメディアファイルの追加または削除も許可する方法です。 おそらく、私のJsファイルは注意点です。より良い解決策はありますか?
あなたの助けに感謝の
ねえ、あなたの助けのために」ありがとうございます。残念ながらそれはまだ動作しません:/ – MeursaultF