Yii2休息,在POST、PUT等上给予405分

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或

我正试图在一个Yii2高级应用程序中构建一个restapi,用于管理对数据库的简单查询。 根据一些教程,最终在快速入门中逐步构建指南中的示例,并使我的模型适用于get和HEAD方法

在一个模块内创建了我的API服务,正确设置,使用最低设置,在backend/main.php上请求JSON解析器,在common/main.php中注册模块,并在那里的urlManager中创建了规则(低于最低常用规则,enablePrettyUrl,controller/action,…):

但每当我通过CURL或postmanrest客户端尝试其他方法时,它总是给我一个405错误:

方法不允许。此url只能处理以下请求 方法:获取,头部

我想我已经尝试了很多不同的配置和路径来解决它,但是没有任何结果。 唯一的问题是urlManager中的
'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],