Почти все работает, но я не знаю, почему второе включение работает только частично.
Я объясняю себя =>
У меня есть шаблон ветки, который содержит строку формы с именем "введите ":
{% extends 'base.html.twig' %}
{% block title %}Supports pédagogiques - {{ parent() }}{% endblock %}
{% block body %}
<div class="container">
{{ form_start(form, { 'attr': {'novalidate': 'novalidate'}} ) }}
<div class="row justify-content-center">
<div class="col-md-10 alert alert-light text-center">
<h1>Nouveau contenu</h1>
<hr>
{{form_row((form.type), {'id': 'type'}) }}
<div class="form_container">
</div>
</div>
</div>
{{ form_end(form, {'render_rest': false}) }}
</div>
{% endblock %}
В этой строке вы можете выбрать 3 опции, как вы можете видеть в ContentType.php:
<?php
namespace App\Form;
use App\Entity\Content;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Vich\UploaderBundle\Form\Type\VichFileType;
class ContentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'placeholder' => 'Choisissez un type de contenu',
'label' => 'Type de contenu',
'choices' => array(
'Tutoriel vidéo' => 'Tutoriel',
'Autre vidéo' => 'Vidéo',
'Support PDF' => 'Support PDF'
),
))
->add('title', TextType::class, array(
'label' => 'Titre'
))
->add('link', UrlType::class, array(
'label' => 'Lien de la vidéo (copier l\'URL de la page)'
))
->add('description', TextType::class, array(
'label' => 'Description du contenu'
))
->add('pdfFile', VichFileType::class, array(
'label' => 'Uploader le PDF'
))
// ->add('created_at')
// ->add('user')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Content::class,
]);
}
}
, и я хочу, чтобы остальная часть формы былабыть включенным в зависимости от выбранной опции (одна форма для PDF и другая для Tutoriel и Video), поэтому я добавил Jquery:
{% block javascripts %}
<script>
$("#type").on('change', function () {
var type = $(this).val();
if (type == 'Support PDF') {
$('.form_container').html(`{% include 'form/pdf.html.twig' %}`);
} else {
$('.form_container').html(`{% include 'form/video.html.twig' %}`);
}
});
</script>
{% endblock %}
Вот форма / pdf.html.twig:
{{form_row(form.title)}}
{{form_row(form.description)}}
{{form_row(form.pdfFile)}}
<button type="submit" class="btn btn-success">Ajouter le PDF</button>
А вот форма / video.html.twig:
{{form_row(form.title)}}
{{form_row(form.description)}}
{{form_row(form.link)}}
<button type="submit" class="btn btn-success">Ajouter la vidéo</button>
Когда выбрано «Поддержка PDF», все хорошо, полная форма включена.Но когда выбран один из 2 других, video.html.twig только частично включает:
Точнее, {{form_row (form.title)}} и {{form_row (form.description)}} не включены.
У меня есть только:
{{form_row(form.pdfFile)}}
<button type="submit" class="btn btn-success">Ajouter le PDF</button>.
Я не могу объяснить эту проблему ...