Yii2休息,在POST、PUT等上给予405分
我正试图在一个Yii2高级应用程序中构建一个restapi,用于管理对数据库的简单查询。 根据一些教程,最终在快速入门中逐步构建指南中的示例,并使我的模型适用于get和HEAD方法 在一个模块内创建了我的API服务,正确设置,使用最低设置,在backend/main.php上请求JSON解析器,在common/main.php中注册模块,并在那里的urlManager中创建了规则(低于最低常用规则,enablePrettyUrl,controller/action,…): 但每当我通过CURL或postmanrest客户端尝试其他方法时,它总是给我一个405错误: 方法不允许。此url只能处理以下请求 方法:获取,头部 我想我已经尝试了很多不同的配置和路径来解决它,但是没有任何结果。 唯一的问题是urlManager中的Yii2休息,在POST、PUT等上给予405分,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我正试图在一个Yii2高级应用程序中构建一个restapi,用于管理对数据库的简单查询。 根据一些教程,最终在快速入门中逐步构建指南中的示例,并使我的模型适用于get和HEAD方法 在一个模块内创建了我的API服务,正确设置,使用最低设置,在backend/main.php上请求JSON解析器,在common/main.php中注册模块,并在那里的urlManager中创建了规则(低于最低常用规则,enablePrettyUrl,controller/action,…): 但每当我通过CURL或
'enableStrictParsing'=>false'
,因为它在某些URL上给了我一个404错误,POST也不能处理这个问题,尽管应用程序正常工作
任何帮助都将不胜感激。
问候 如果没有关于precapi控制器基于什么的更多信息,我将假设它是从
\yii\rest\ActiveController
派生出来的
如果是这样,您可能需要覆盖控制器中的verbs()
-函数:
默认实现如下所示:
protected function verbs()
{
return [
'index' => ['GET', 'HEAD'],
'view' => ['GET', 'HEAD'],
'create' => ['POST'],
'update' => ['PUT', 'PATCH'],
'delete' => ['DELETE'],
];
}
我认为,鉴于您的评论,UrlManager配置确实存在一个小问题,因此我出去阅读了一些反馈,看到您将控制器添加到一个模块中。: 此复合规则中的规则正在处理的控制器ID(例如,用户、post comment)如果控制器位于模块内(例如管理员/用户),则应在其前面加上模块ID。
这可能就是问题所在吗?我认为这是一个多元化的问题,试试这个
['class' => 'yii\rest\UrlRule', 'controller' => 'precapi', 'pluralize'=>false],
我在问这个问题,因为我有它,并杀死了一整天,以找到解决办法。我非常愚蠢。 这不是YII2框架的问题,而是一个curl问题。 这不是某些控制器、操作或行为的问题,而是正确的拼写curl命令的问题 以下是错误的命令-删除或放置不工作并引发405错误: curl-i-H“Accept:application/json“-H”内容类型:application/json“-XDELETE”“-d'{“myid”:“2”}” 不允许使用HTTP/1.1 405方法 服务器:nginx/1.8.1 日期:2016年6月26日星期日07:47:51 GMT 内容类型:application/json;字符集=UTF-8 内容长度:0 连接:保持活力 X-Powered-By:PHP/5.6.22 允许:获取、发布、头、选项 下面是curl正确的命令: curl-i-H“Accept:application/json”-H“内容类型:application/json”-XDELETE” HTTP/1.1 204无内容 服务器:nginx/1.8.1 日期:2016年6月26日星期日07:49:19 GMT 内容类型:application/json;字符集=UTF-8 内容长度:0 连接:保持活力 X-Powered-By:PHP/5.6.22
就这些,祝你好运 我想添加我今天遇到的可能的问题和解决方案。它在URL中有额外的
/
,类似http://localhost:8080/index.php/module/controller_id/?access-令牌=\u令牌\u此处
请注意,URL中的/
在控制器id之后是多么微妙
这是我的问题,我通过删除额外的
/
来解决。谢谢。是的,它是从ActiveController派生的。但我相信它应该在默认情况下工作,而不需要进一步的方法,正如文档中所写的那样。名称空间应用程序\模块\控制器;使用yii\rest\ActiveController;类DefaultController扩展了ActiveController,并从表中实例化了模型。将尝试让您知道。该实现的结果相同。不管怎样,还是要谢谢你。你的想法是修改实现并添加“POST”。我只是添加了默认的一个例子,没有运气。使用行为合并数组和verbfilter或直接使用verbs方法。同样的结果。我将尝试使用yii\rest\controller而不是ActiveController。如果我使用controller并编写基本函数索引、视图等也是一样的。。。索引确实起作用,但视图不起作用,这给了我一个404。与使用ActiveController相同。所以我考虑的是在common/main.php中定义的urlManager。无论如何,任何例子或帮助都将不胜感激。
['class' => 'yii\rest\UrlRule', 'controller' => 'precapi', 'pluralize'=>false],