Symfony form & Ajax



我正在开发Symfony 4.4。

要刷新表格,用户通过输入选择三个选项:

  • 正在进行
  • 已完成
  • 全部

然后他们必须按下验证按钮。

我想通过自动刷新表格来提高这个页面的使用率。

目前在我的模型上,我有AJX,它允许我检索条目的值:

<script>
$(document).on('change', '#campagnes_tel_isAttending', function () {
$('#flash').remove();
let $field = $(this)
let $preselect = $('#campagnes_tel_isAttending')
let $form = $field.closest('form')
let data = {}
data[$field.attr('name')] = $field.val()
console.log(data)
// On soumet les données
// $.post($form.attr('action'), data).then(function (data) {
//     // On récupère le nouveau <select>
//     $('#planningsms_client_label').val($(data).find('#planningsms_client option:selected').text());
//     let $input = $(data).find(target)
//     // On remplace notre <select> actuel
//     $(target).replaceWith($input)
// })
});
</script>

我现在陷入了困境,因为我不知道如何将信息返回到我的控制器,从而允许我用输入的值修改PreSelect变量并更改SQL查询的结构。

创建路线?在Ajax POST中调用路由?在我的控制器中使用此路线?

我认为或多或少是这样,但另一方面我不知道如何实现它

编辑:

它向前推进了一点。

我设法恢复了控制器中输入更改的数据。

另一方面,我试图调用函数,该函数将允许我使用所选的过滤器进行新的SQL查询,但似乎不起作用。

Ajax:

<script>
$(document).on('change', '#campagnes_tel_isAttending', function () {
$('#flash').remove();
let $field = $(this)
let $preselect = $('#campagnes_tel_isAttending')
let $form = $field.closest('form')
let data = {}
data['isAttending'] = $field.val()
console.log(data)
$.ajax({
type: "POST",
url: "/campagnestel/ajax",
data: data,
dataType: "json",
success: function(response) {
console.log(response);
}
});
});
</script>

我的控制器中的功能:

/**
* @Route("/ajax", methods={"GET", "POST"})
*/
public function testAjax(Request $request)
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array(
'status' => 'Error',
'message' => 'Error'),
400);
}
if(isset($request->request)) {
$preSelect = $request->request->get('isAttending');
return $this->queryFollowingFilter($preSelect);
}
//        return $this->queryFollowingFilter($preSelect);
return  new JsonResponse(array(
'status' => 'OK'),
200);
}

错误:

The controller must return a "SymfonyComponentHttpFoundationResponse" object but it returned an array

如错误消息所示:

控制器必须返回一个";Symfony\Component\HttpFoundation\Response"目标

JsonResponse满足该要求并适合您的需求。试试这个:

if($request->request->has('isAttending')) {
$preSelect = $request->request->get('isAttending');
return new JsonResponse(
$this->queryFollowingFilter($preSelect),
200
);
}

最新更新