Php Symfony2路由:不允许方法(允许:{Method})
因此,在routing.yml中,我定义了以下路由,以便编辑和删除特定设置: 路由。yml:Php Symfony2路由:不允许方法(允许:{Method}),php,symfony,symfony-routing,Php,Symfony,Symfony Routing,因此,在routing.yml中,我定义了以下路由,以便编辑和删除特定设置: 路由。yml: settings.editDefaults: path: settings/{id}/defaults/edit/{widgetType} defaults: { _controller: AppBundle:Settings:editDefaults } methods: [POST, PUT] settings.deleteDefaults: path
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]
/**
* 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
}
在我的控制器中,我定义了正确的操作:
SettingController.php:
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]
/**
* 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
,这样我就可以查询并删除所选记录
当我选择其中一条路线时,我会得到以下信息:
编辑路由错误:
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]
/**
* 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
}
找不到“获取”的路由
/设置/2b2acd55-0dd6-11e5-8107-621ae3320fd4/默认值/编辑/默认值”:
不允许使用方法(允许:POST、PUT)
删除路由错误:
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]
/**
* 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
}
找不到“获取”的路由
/设置/2b2acd55-0dd6-11e5-8107-621ae3320fd4/默认值/删除/默认值”:
方法不允许(允许:删除)
但是当我去掉一个,留下另一个时,它们工作得很好。我假设路径定义是相似的?我是否可以保持相同的路径而不出现此错误?我不明白什么
感谢您的帮助,您只允许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方法
当您使用浏览器访问URL时,通常是通过GET方法发送请求。您可以阅读更多关于这些的信息:
您是否使用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) }}
{{form\u start(delete\u form)}
删除
{{form_end(delete_form)}
编辑表单相同对于遇到此问题的其他人,其他答案无法解决此问题,请检查您是否意外地将另一个方法命名为相同的东西。如果发生这种情况,则忽略其中一个方法 检查这是否正常的一种方法是
php bin/console debug:router
验证您的路由是有意义的。嘿,JaVe,谢谢你的回答。现在我已经删除了这些方法,在删除时,它会在
editAction
中报告一个错误,为什么该路由操作也被称为?@AnthBieb:你删除了方法
部分,但我建议你保留它;这在语义上是正确的。错误不存在t在路由中,但在url请求中(您需要使用DELETE、PUT或POST方法设置调用它)