我有一个使用 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/