Symfony2路由:不允许的方法(允许:{方法})

Ant*_*ieb 7 php symfony symfony-routing

所以在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]
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我定义了正确的操作: 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
}
Run Code Online (Sandbox Code Playgroud)

在第二个动作,我只需要idwidgetType经过这样我就可以查询和删除选定的记录.

当我去任何一条路线时,我得到以下内容:

编辑路线错误:

找不到"GET/settings/2b2acd55-0dd6-11e5-8107-621ae3320fd4/defaults/edit/default"的路由:不允许的方法(允许:POST,PUT)

删除路线错误:

找不到"GET/settings/2b2acd55-0dd6-11e5-8107-621ae3320fd4/defaults/delete/default"的路由:不允许的方法(允许:DELETE)

但当我删除一个并离开另一个他们工作正常.我假设它的路径定义相似吗?我可以保持相同的路径而不会出现此错误吗?我不明白的是什么?

感谢你的帮助,Anth

Jan*_*ris 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 }
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实需要这些限制,则保留 DELETE、PUT 和 POST 方法并添加 GET 方法。

当您使用浏览器访问 URL 时,通常会通过 GET 方法发送请求。您可以阅读有关这些的更多信息: 此处 和此处