Я пытаюсь вставить репозиторий в форму в Symfony 3.4, а затем использовать выбранный вариант при отправке формы.
Вот код формы:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('text', TextareaType::class, [
'label' => 'Text'
])
->add('category', EntityType::class, [
'class' => Category::class,
'choice_label' => 'name',
'query_builder' => function(CategoryRepository $repo) {
return $repo->createQueryBuilder('c')
->groupBy('c.name');
}
])
->add('subcategory', EntityType::class, [
'class' => Category::class,
'choice_label' => 'subcategory',
'query_builder' => function(CategoryRepository $repo) {
return $repo->createQueryBuilder('c')
->groupBy('c.subcategory');
}
]);
}
С его помощью я могу визуализировать форму, и она хорошо выглядит. Я могу выбирать различные варианты в CategoryRepository.
{% block body %}
{{ form_start(form) }}
{{ form_label(form.name) }}
{{ form_errors(form.name) }}
{{ form_widget(form.name) }}
{{ form_label(form.subcategory) }}
{{ form_errors(form.subcategory) }}
{{ form_widget(form.subcategory) }}
{{ form_end(form) }}
При отправке при проверке с помощью Xdebug категория - это объект Category. Я вижу правильные значения (выбранные в раскрывающемся списке формы), но мне нужна только строка, например category.name. Как мне это сделать?
Кроме того, может потребоваться другой вопрос, но когда я выбираю одну из категорий, я хочу, чтобы подкатегория была обновлена, чтобы исключить те, которые не принадлежат к этой выбранной категории. Я понимаю, что для этого может потребоваться jquery.




Я уверен, что есть способы получше, но одним из решений было бы
$category = $data->getCategory();
$data->setCategory($category->getName());
$data->setSubcategory($category->getSubcategory());
И чтобы исключить подкатегории, я использую jQuery / JavaScript для получения отфильтрованных результатов из контроллера / репозитория, а затем удаляю или добавляю эти параметры в HTML.
Для вашего второго вопроса с соответствующими полями ввода выбора взгляните на это: symfony.com/doc/current/form/dynamic_form_modification.html. Никакой jquery не требуется, если только не задействованы только 2 ввода выбора. Если вам нужно больше, вам нужно использовать jquery.