我有一个问题,在Symfony 4中发布时删除了一个学说对象。我搜索了问题,我发现我可能要定义一个服务?我是symfony的初学者,所以请不要责怪我...我正在使用数据表,表格是模态的。当我按下模态中的删除按钮时,它会尝试发布到路线但出现错误:
未找到服务“请求”:您的意思是“request_stack”吗?无论如何,“App \ Controller \ ItemManagement”中的容器是一个较小的服务定位器,只知道“doctrine”,“form.factory”,“http_kernel”,“parameter_bag”,“request_stack”,“router”,“security” .csrf.token_manager“,”session“和”twig“服务。尝试使用依赖注入。
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteit">Delete Item</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
Are you sure you want to delete this item?
<form action="{{ path('delete_item')}}" method="POST" id="theform" >
<input type="hidden" value="" name="itemtodel" id="itemtodel"/>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" form="theform" class="btn btn-danger">Delete</button>
</div>
</div>
</div>
</div>
在控制器中:
/**
* @Route("/delitem", name="delete_item", methods={"POST"});
*/
public function deletetheitem(Request $request)
{
if ($request->isMethod('POST')) {
$itemid = $this->get('request')->request->get('itemtodel');
... deleting item code...
}
}
return $this->redirectToRoute("item_management", [], 301);
}
路径item_management位于同一个控制器中,工作正常。我是用错误的方式做的吗?如果你有什么建议我会很感激,谢谢!!!!
尝试更换
$this->get('request')->request->get('itemtodel')
通过
$request->request->get('itemtodel')
首先,您不需要定义任何服务,因为一切都应该在Symfony 4中开箱即用(如果您没有自定义默认配置)。
其次,不要在模板中创建静态html表单。请改用Symfony Forms(https://symfony.com/doc/current/forms.html)。
第三,如果不应该对查询进行额外检查以获取要删除的对象,则不需要使用请求对象。如果你没有关闭默认Symfony 4的参数转换器选项(参见https://symfony.com/doc/current/best_practices/controllers.html#using-the-paramconverter),删除操作可能是这样的:
/**
* @Route("/delitem/{item}", name="delete_item", methods={"POST"});
*/
public function deleteItemAction(Item $item)
{
$doctrine = $this->getDoctrine();
$em = $doctrine->getManager();
$em->remove($item);
$em->flush();
//process your response
}