php - 使用 Ajax 访问 Symfony 中的 Controller 方法

标签 php jquery ajax symfony

我有一个使用 Twig 模板的表单类型,在该 Twig 中,我获取附加到当前列表对象的图像,并显示它们以及为用户删除它们的选项。我希望能够让用户可以单独删除图像而无需刷新页面,因此我尝试使用 Ajax 触发 Controller 方法。

scripts.js

$('.delete_image').on('click', function(e) {
  $.ajax({
    type: 'POST',
    url: '/delete_image',
    data: ({
      listing_id: $('#listing_id').val(),
      imageName: 'nature-forest-trees-158251.jpg'
    }),
    success: function(response) {},

    error: function(jqXHR, textStatus, errorThrown) {
      alert('status code: ' + jqXHR.status + 'errorThrown: ' + errorThrown + 'jqXHR.responseText:' + jqXHR.responseText);
    }
  })
})

imageName 只是一个占位符值(我正在调试的图像),在我的 Controller 中我有

ListingController.php

/**
 * @Route("/delete_image", name="delete_image")
 * @Method({"GET", "POST"})
 * @ParamConverter("listing", class="DirectoryPlatform\AppBundle\Entity\Listing")
 */
public function deleteImage(Request $request, Listing $listing) {
  // $listing_id = (isset($_POST['listing'])) ? $_POST['listing'] : -1;
  // $imageName = (isset($_POST['imageName'])) ? $_POST['imagename'] : -1;
  $listing_id = $request->get('listing');
  $imageName = $request->get('imageName');
  $this->get('punk_ave.file_uploader')->removeFiles(array('folder' => 'tmp/attachments/' . $listing->getId() . '/'. $imageName));

  exit(0);
}

我尝试使用 $_POST[] 以及 $request->get() 但无济于事。我也许可以使用内联脚本,但为了最佳编码实践,我想避免使用内联脚本。

最佳答案

在 Controller 内获取 POST 变量的方法是:

$listing_id = $request->request->get('listing');

但是,在您的情况下,我会怀疑是否应该使用 AJAX 请求,因为您可以通过正确操作 DOM 来避免 AJAX 调用的开销(例如,在单击删除按钮时从 DOM 中删除图像,而无需在服务器上采取任何操作),最后通过提交表单来一起提交所有更改,然后从您的实体中删除已删除的图像。

最后一次调用也可能是 AJAX 调用。

关于php - 使用 Ajax 访问 Symfony 中的 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507381/

相关文章:

javascript - 隐藏选定类别的特定行

javascript - 如何从 XMLHttpRequest.responseText 解析 HTML 属性值?

AJAX同步和异步区别

php - 作为 shell 脚本的 PHP 权限被拒绝

php - 如何找到此 sql 查询的行数?

php - 按列值对 mySQL 结果进行排序

javascript - 使 Jquery.ScrollTo 根据速度而不是持续时间工作

jquery - 如何修复视差窗口滚动溢出?

javascript - 如何验证 Ajax 的 dojo javascript 表单?

php - Guzzle 6 : upload files with array data