Yii2控制器或配置引发仅处理以下请求方法:GET,HEAD

时间:2016-02-08 04:46:41

标签: php yii2 yii2-advanced-app yii2-basic-app

我正在尝试使用json格式做一些非常简单的REST响应。

我创建了一个简单的模型:

模型

<?php

namespace app\models;

use Yii;
use yii\db\ActiveRecord;

class Post extends ActiveRecord
{        
    /**
     * @inheritdoc
     */ 
    public static function tableName()
    {
        return 'posts';
    }

    public function rules()
    {
        return [
            [['title', 'content'], 'required'], 
        ];
    }
}

一个简单的控制器:

控制器

namespace app\controllers;

use Yii;
use yii\rest\ActiveController;

class PostsController extends ActiveController
{       
    public $modelClass = "app\models\Post";
}

?>

这是 web.php 文件的配置:

  $config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            'cookieValidationKey' => 'wcHYBrv4bXfLJYnWzrpJz_5vARaAeE9U',
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ],
        ],
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'enableStrictParsing' => false,
            //'showScriptName' => false,
            'rules' => [
                'class' => 'yii\rest\UrlRule',
                'controller' => 'posts',           
            ]
        ],
        Other attributes...

最重要的部分(我认为是)是 urlManager 配置,也许我遗漏了一些东西,但我不知道下面的错误在哪里。

错误

当我使用方法GET执行请求时,一切都很好,但是使用任何其他方法都会失败。这是错误:

{
  "name": "Method Not Allowed",
  "message": "Method Not Allowed. This url can only handle the following request methods: GET, HEAD.",
  "code": 0,
  "status": 405,
  "type": "yii\web\MethodNotAllowedHttpException"
}

我希望得到一个简单的回复,例如这个人进入this video我只是一步一步地做了相同的配置。

谢谢。

更新

有更多信息,当我使用Postman时,我得到了这个Headers结果。

enter image description here

我不明白为什么只有ALLOW -> GET, HEAD

这是身体结果:

enter image description here

3 个答案:

答案 0 :(得分:0)

尝试此配置:

'urlManager' => [
    'enablePrettyUrl' => true,
    'enableStrictParsing' => true,
    'showScriptName' => false,
    'rules' => [
        ['class' => 'yii\rest\UrlRule', 'controller' => 'post'],
    ],
],

在官方文档中查看config以及可用requests的完整列表。

答案 1 :(得分:0)

'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            [
                'class' => 'yii\rest\UrlRule',
                'controller' => 'author',
                'pluralize' => false
            ],
        ],
    ],

答案 2 :(得分:0)

当我必须要做类似的事情时,我会有所不同。尝试将urlManager中的类更改为“ yii \ rest \ UrlRule”

示例(此代码对我有用):

composer dump-autoload

现在尝试访问该URL POST frontend.dev/basic/web/post whit Postman