api - 设置未知属性:yii\web\UrlRule::GET

标签 api rest yii2 composer-php yii-url-manager

我有这个错误,我不知道解决。

我用 Yii2 创建了一个 api 端点。几天前端点正在工作,但现在它没有并引发此错误:

{
name: "Unknown Property",
message: "Setting unknown property: yii\web\UrlRule::GET index",
code: 0,
type: "yii\base\UnknownPropertyException",
file: "C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Object.php",
line: 161,
stack-trace: [
"#0 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\BaseYii.php(521): yii\base\Object->__set('GET index', 'index')",
"#1 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Object.php(105): yii\BaseYii::configure(Object(yii\web\UrlRule), Array)",
"#2 [internal function]: yii\base\Object->__construct(Array)",
"#3 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(374): ReflectionClass->newInstanceArgs(Array)",
"#4 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(153): yii\di\Container->build('yii\\web\\UrlRule', Array, Array)",
"#5 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\BaseYii.php(344): yii\di\Container->get('yii\\web\\UrlRule', Array, Array)",
"#6 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\web\UrlManager.php(212): yii\BaseYii::createObject(Array)",
"#7 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\web\UrlManager.php(154): yii\web\UrlManager->buildRules(Array)",
"#8 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Object.php(107): yii\web\UrlManager->init()",
"#9 [internal function]: yii\base\Object->__construct(Array)",
"#10 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(374): ReflectionClass->newInstanceArgs(Array)",
"#11 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(153): yii\di\Container->build('yii\\web\\UrlMana...', Array, Array)",
"#12 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\BaseYii.php(344): yii\di\Container->get('yii\\web\\UrlMana...', Array, Array)",
"#13 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\ServiceLocator.php(133): yii\BaseYii::createObject(Array)",
"#14 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Application.php(563): yii\di\ServiceLocator->get('urlManager')",
"#15 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\web\Request.php(180): yii\base\Application->getUrlManager()",
"#16 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\web\Application.php(75): yii\web\Request->resolve()",
"#17 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))",
"#18 C:\xampp\htdocs\forkandjoin\api\index.php(13): yii\base\Application->run()",
"#19 {

有我的 urlManager 配置:
modules' => [
        'v1' => [
            'basePath' => '@app/api/modules/v1', // base path for our module class
            'class' => 'app\api\modules\v1\Api', // Path to module class
        ]
    ]
'components'  => [
        'urlManager'  => [
            'enablePrettyUrl'  => true,
            'showScriptName'  => false,
            'enableStrictParsing' => false,
            'rules' => [
                'class'  => 'yii\rest\UrlRule',
                'controller'  => 'v1/demo',
                'patterns' => [
                    'GET index' => 'index'
                ]
            ],
        ],

我使用 Demo Controller 和一个简单的索引端点创建了这个简单的示例,以显示更清晰的问题。

我怎么解决这个问题?为什么返回未知属性。

信息
OS: Windows 10.
Composer: version 1.0.0 2016-04-05 13:27:25
Yii version: 2

我的 Composer 文件
{
    "name": "yiisoft/yii2-app-advanced",
    "description": "Yii 2 Advanced Project Template",
    "keywords": ["yii2", "framework", "advanced", "project template"],
    "homepage": "http://www.yiiframework.com/",
    "type": "project",
    "license": "BSD-3-Clause",
    "support": {
        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
        "forum": "http://www.yiiframework.com/forum/",
        "wiki": "http://www.yiiframework.com/wiki/",
        "irc": "irc://irc.freenode.net/yii",
        "source": "https://github.com/yiisoft/yii2"
    },
    "minimum-stability": "stable",
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.6",
        "yiisoft/yii2-bootstrap": "*",
        "yiisoft/yii2-swiftmailer": "*",
        "linslin/yii2-curl": "*"
    },
    "require-dev": {
        "yiisoft/yii2-codeception": "*",
        "yiisoft/yii2-debug": "*",
        "yiisoft/yii2-gii": "*",
        "yiisoft/yii2-faker": "*"
    },
    "config": {
        "process-timeout": 1800
    },
    "extra": {
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }
}

如果您需要更多信息,请让我知道,但我现在需要解决这个问题,否则我将成为一个没有返回的疯子。

更新: Controller

这是我的 Controller :
<?php

namespace app\api\modules\v1\controllers;

use yii\rest\Controller;

class DemoController extends Controller
{
    public function behaviors() {
        return [
            [
                'class' => \yii\filters\ContentNegotiator::className(),
                'formats' => [
                    'application/json' => \yii\web\Response::FORMAT_JSON,
                ],
            ],
        ];
    }

    public function actionIndex(){
        return "index ";
    }
}

Yii2 路由指南

我按照关于 Routing 的官方指南做了这些配置:
[
    'class' => 'yii\rest\UrlRule',
    'controller' => 'user',
    'extraPatterns' => [
        'GET search' => 'search',
    ],
]

最佳答案

哇,谢谢你们。我整个周末都在努力解决这个问题,根据您的反馈和研究,我发现配置中有一个小错误。在 Yii2 指南中解释了两段代码中的配置。所以我不得不改变我的代码:

'rules' => [
    'class'  => 'yii\rest\UrlRule',
    'controller'  => 'v1/demo',
    'extraPatterns' => [
        'GET index' => 'index'
   ]
]

对这个:
'rules' => [
    [ // array item
      'class'  => 'yii\rest\UrlRule',
      'controller'  => 'v1/demo',
      'extraPatterns' => [
          'GET index' => 'index'
       ] 
    ]//close the array item
]

嗯,错误消失了。

关于api - 设置未知属性:yii\web\UrlRule::GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551702/

相关文章:

api - oAuth2 - WSO2 API 管理器和身份服务器集成

json - 按年月的 Swift JSON 搜索日期格式?

api - REST API版本控制

bootstrap-4 - Yii2 - 将 Bootstrap 3 升级到 4

yii2 - 如何使用 phpstorm 配置 yii2

c# - POSTMAN POST 请求返回不支持的媒体类型

api - AWS Rekognition API 调用每次/时间限制

android - 为 Android 创建多人游戏服务器的理想方法(具有非常基本图形的游戏)

c++ - 在 C++ 中使用 libcurl 将图像上传到 Parse 服务器

php - 在 Yii2 中使用 MySQL "IN"语法绑定(bind)参数的正确方法?