嘿,如果我是你,我会为搜索表单创建一个包含 2 种实体类型的 formType,然后使用 Ajax 获取结果。
SearchFormType.php:
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add(
'skill',
EntityType::class,
[
'class' => Skill::class,
]
)
->add(
'skillLevel',
EntityType::class,
[
'class' => SkillLevel::class,
]
);
}
然后使用 jquery 拦截提交并改为通过 Ajax 发送:
app.js:
$('#form').on('submit', (e) => {
e.preventDefault();
$.ajax({
url: $form.attr('action'),
type: 'POST',
dataType: 'json',
data: $form.serialize(),
success: (response) => {
//Display results in div
}
})
})
最后在控制器中处理Ajax响应
Controller.php:
public function search(Request $request){
if ($request->isXmlHttpRequest()) {
$search = $this->createForm(SearchFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$searchData = $form->getData();
//Do what you want with the data and return a json response with the results
return new JsonResponse([$results], 200);
}
}
}
您必须添加查询数据库以获取结果的代码和错误处理才能完成。
我可能错过了一些东西,所以如果你尝试这种方法但它不起作用,请不要犹豫发表评论,我会更深入地挖掘。