Yii2 REST在POST,PUT等上提供405

use*_*496 9 yii2 yii2-advanced-app

我正在尝试在Yii2高级应用程序中构建REST API,以管理对我的数据库的简单查询.在一些教程之后,最后逐步构建指南中的示例,在"快速入门"中,让我的模型适用于GET和HEAD方法.

在模块中创建我的API服务,使用最少的设置正确设置,在backend/main.php上请求JSON解析器,在common/main.php中注册模块并在urlManager中创建规则(在最小的通常规则下面,enablePrettyUrl ,控制器/动作,......):

['class' => 'yii\rest\UrlRule', 'controller' => ['precapi']]
Run Code Online (Sandbox Code Playgroud)

但每当我尝试其他方法时,通过CURL或Postman REST Client,它总会给我一个405错误:

方法不允许.此URL只能处理以下请求方法:GET,HEAD.

我想我已经尝试了很多不同的配置和路径试图解决它,但没有任何结果.唯一的问题是'enableStrictParsing' => false'在urlManager中,因为它在某些URL上给出了404错误,而POST也不能用于此,尽管应用程序正常工作.

任何帮助将不胜感激.问候.

小智 11

我认为是多元化的问题,试试这个

['class' => 'yii\rest\UrlRule', 'controller' => 'precapi', 'pluralize'=>false],
Run Code Online (Sandbox Code Playgroud)


Bli*_*izz 7

如果没有关于你的precapi控制器的基础知识的更多信息,我将假设它来自\yii\rest\ActiveController

如果是这样,您可能会覆盖verbs()控制器中的-function:默认实现如下:

protected function verbs()
{
    return [
        'index' => ['GET', 'HEAD'],
        'view' => ['GET', 'HEAD'],
        'create' => ['POST'],
        'update' => ['PUT', 'PATCH'],
        'delete' => ['DELETE'],
    ];
}
Run Code Online (Sandbox Code Playgroud)

我想,鉴于您的意见,UrlManager配置确实存在一个小问题,所以我回去看了一下,看到您将控制器添加到模块中.
手册有这样的说法:

此复合规则中的规则正在处理的控制器ID(例如,用户,后评论).如果控制器在模块内(例如admin/user),它应该以模块ID为前缀.

可能是问题吗?