所以在routing.yml中我定义了以下路由以编辑和删除特定设置:
的routing.yml:
settings.editDefaults:
path: settings/{id}/defaults/edit/{widgetType}
defaults: { _controller: AppBundle:Settings:editDefaults }
methods: [POST, PUT]
settings.deleteDefaults:
path: settings/{id}/defaults/delete/{widgetType}
defaults: { _controller: AppBundle:Settings:deleteDefaults }
methods: [DELETE]
在我的控制器中,我定义了正确的操作: 的 SettingController.php:
/**
* edit the default settings of a hotel/widget
*/
public function editDefaultsAction(Request $request)
{
//Edit logic
}
/**
* delete a default setting of a hotel/widget
*/
public function deleteDefaultsAction($hotelId, $widgetType)
{
//Delete logic
}
在第二个操作中,我只需要传递id
和widgetType
,这样我就可以查询并删除所选记录。
当我去任何一条路线时,我得到以下内容:
编辑路线错误:
找不到" GET的路线 /设置/ 2b2acd55-0dd6-11e5-8107-621ae3320fd4 /默认/编辑/默认&#34 ;: 方法不允许(允许:POST,PUT)
删除路线错误:
找不到" GET的路线 /设置/ 2b2acd55-0dd6-11e5-8107-621ae3320fd4 /默认/删除/默认&#34 ;: 方法不允许(允许:删除)
但是,当我删除一个并离开另一个他们工作正常。我假设它的路径定义相似吗?我可以保持相同的路径而不会出现此错误吗?我不理解的是什么?
感谢您的帮助,Anth
答案 0 :(得分:3)
您是否使用CRUD生成了操作?
我找到了解决此问题的解决方案。
/**
* Deletes a Preisliste entity.
*
*/
public function deleteAction(Request $request, $id)
{
/*$form = $this->createDeleteForm($id);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MandantBundle:Preisliste')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Preisliste entity.');
}
$em->remove($entity);
$em->flush();
}
return $this->redirect($this->generateUrl('preisliste'));*/
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MandantBundle:Preisliste')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Preisliste entity.');
}
$em->remove($entity);
$em->flush();
return $this->redirect($this->generateUrl('preisliste'));
}
评论的代码来自CRUD并且不起作用。我得到了同样的错误(没有找到“GET ...”的路线)我不知道为什么Symfony试图使用表格删除。只删除实体对我来说是正确的方法。
答案 1 :(得分:2)
您只允许使用POST,PUT和DELETE方法,但是您正通过GET方法访问这些路由。
所以定义你的路线:
settings.editDefaults:
path: settings/{id}/defaults/edit/{widgetType}
defaults: { _controller: AppBundle:Settings:editDefaults }
settings.deleteDefaults:
path: settings/{id}/defaults/delete/{widgetType}
defaults: { _controller: AppBundle:Settings:deleteDefaults }
或者保留DELETE,PUT和POST方法,如果你真的需要这些限制并添加GET方法。
答案 2 :(得分:2)
而不是在您的视图中:
<a href="{{ path('settings_delete', { 'id': settings.id }) }}">
Delete
</a>
使用表格:
{{ form_start(delete_form) }}
<button type="submit">Delete</button>
{{ form_end(delete_form) }}
编辑表格相同
答案 3 :(得分:0)
对于遇到此问题但其他答案未解决的其他任何人,请检查您是否不小心将另一个方法命名为同一事物。如果发生这种情况,其中之一将被忽略。
对此进行检查的一种方法是
php bin/console debug:router
验证路线很有意义。