базовая информация: Визуализация
В TrainingType.php, который создает форму:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('trainer', EntityType::class, [
'class' => 'AppBundle:Trainer',
'choices' => $training->trainer_list ?? null,
'label'`enter code here` => 'seminar.trainer.form.trainer.label',
'placeholder' => 'form.trainer.placeholder',
'required' => false,
]);
$builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onPreSetData']); // update 'trainer'
$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']); // update 'trainer'
}
в ветке:
{% if field == 'trainer' %}
{{ form_row(attribute(form, field), {'id': 'trainer'}) }}
{% endif %}
javascript(тест):
<script>
$(document).ready(() => {
function trainer_changed() {
let trainer = $('#trainer');
jQuery.ajax({
url: '{{ path('trainer_select_ajax') }}',
type: 'GET',
data: {
//this is the id of the selected option, not the search term
search: trainer.val()
},
success: function (html) {
let trainer = $('#trainer');
let newchoices = $(html).find('#trainer');
trainer.replaceWith(
newchoices // works
);
}
});
}
// when a new option is selected, not what I want
$('#trainer').change(trainer_changed);
$('#trainer').on('input', trainer_changed); // no effect
});
</script>
Список выбора должен обновляться при наборе 'foo' В настоящее время он не показывает выбираемых параметров, поскольку не находит результатов для "foo" в предварительно загруженномданные, даже если вызов ajax на сервер отправил "foo", он вернул бы результаты для него.
Поэтому мой вопрос заключается в том, как поместить слушатель "oninput" или "onchange" в поле поиска какпоказано на изображении.Когда я начинаю печатать, он должен получить обновленный список выбора с сервера с помощью ajax-вызова и сразу же заменить его в раскрывающемся списке.
Я пока не смог даже выбрать поле поиска.Документация Symfony по адресу https://symfony.com/doc/3.4/form/dynamic_form_modification.html совсем не помогает, потому что все эти примеры событий запускаются только тогда, когда что-то действительно выбрано, а не просто при наборе поискового запроса.
Бонус, хотя, думаю, у меня естьидея, как это сделать, просто переформатировав записи с помощью javascript, я хотел бы иметь возможность показывать каждый параметр как «LastName, FirstName - Title - Price» вместо метода «LastName, FirstName» (__toString ()The Trainer Entity), которую использует сама SymfonyТак что, я думаю, я бы хотел, чтобы Symfony использовал метод, отличный от __toString () для этой конкретной строки формы.