У меня есть проблема, которую я не могу решить.Прежде всего, извините, если английский плохой, я француз, и я использую переводчик.
У меня есть страница, на которой я хотел бы отобразить раскрывающийся список только по умолчанию.И я хочу, чтобы, когда пользователь выбирает значение в списке, в зависимости от значения, он добавляет либо поле типа NumberType , либо поле типа TimeType .
Я видел в документе, что для этого есть FormEvents .И в моем случае это будет POST_SET_DATA .
Итак, я сделал эту форму :
<?php
namespace App\Form;
use App\Entity\RHCredit;
use App\Entity\TypeConge;
use Symfony\Component\Form\FormEvents;
use App\Repository\TypeCongeRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormEvent;
class RHCreditType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('typeConge', EntityType::class, [
'class' => TypeConge::class,
'label' => false,
'placeholder' => "Type d'absence",
'choice_label' => 'nom',
'choice_value' => 'nom',
'query_builder' => function (TypeCongeRepository $repoTypes) {
return $repoTypes->getTypesSaufMaladie();
}
])
->add('soldeFloat', NumberType::class);
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$typeConge = $data->getTypeConge();
if ($typeConge) {
if ($typeConge->getNom() == "Heures supp") {
$form->add('soldeTime', TimeType::class);
} else {
$form->add('soldeFloat', NumberType::class);
}
}
}
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => RHCredit::class,
]);
}
}
Я не знаю, нормально ли это,Но в любом случае в документации говорят, что вы должны javascript в файле Twig .
Итак, я запустил код:
{% block javascripts %}
<script>
var $typeConge = $("#rh_credit_typeConge");
$typeConge.change(function () {
var $form = $(this).closest('form');
var data = {};
data[$typeConge.attr('nom')] = $typeConge.val();
console.log(data[$typeConge.attr('nom')]);
$.post($form.attr('action'), data).then(function (data) {
//And now ?
})
})
</script>
{% endblock %}
Но я не знаю, как сделать мои поля " soldeFloat " моими " soldeTime " добавлены на основевыбор пользователя в списке.