所以在routing.yml中,我定义了以下路线,以便编辑和删除特定设置:
路由。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"的路由/设置/2b2cd55-0dd6-11e5-8107-621ae3320fd4/defaults/edit/default":不允许的方法(允许:POST、PUT)
删除路由错误:
未找到"GET"的路由/设置/2b2cd55-0dd6-11e5-8107-621ae3320fd4/defaults/delete/default":不允许的方法(允许:DELETE)
但当我去掉一个,留下另一个时,它们会很好地工作。我想是路径定义相似吗?我有可能保持相同的路径而不出现这个错误吗?我有什么不明白的?
感谢您的帮助,Anth
您是否使用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为什么试图使用表单删除。只有删除实体对我来说是正确的方式。
在您的视图中不是这样:
<a href="{{ path('settings_delete', { 'id': settings.id }) }}">
Delete
</a>
使用一种形式:
{{ form_start(delete_form) }}
<button type="submit">Delete</button>
{{ form_end(delete_form) }}
与编辑表单相同
您只允许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 }
如果您确实需要这些限制并添加GET方法,也可以将DELETE、PUT和POST方法保留在中。
当您使用浏览器访问URL时,通常会通过GET方法发送请求。您可以阅读更多关于这些的信息:在这里此处
如果其他人遇到其他答案无法解决的问题,请检查您是否意外地将另一个方法命名为相同的方法。如果发生这种情况,其中一个将被忽略。
健全性检查的一种方法是进行
php bin/console debug:router
验证你的路线是有意义的。