【问题标题】:Yii2 Setting unknown property: yii\filters\auth\HttpBearerAuth::formatsYii2 设置未知属性:yii\filters\auth\HttpBearerAuth::formats
【发布时间】:2017-07-13 15:18:15
【问题描述】:

我在 YII2 中创建 API,每个请求都运行良好,但在 PUT 请求中我遇到错误

未知属性 – yii\base\UnknownPropertyException

设置未知属性:yii\filters\auth\HttpBearerAuth::formats

这是我的堆栈跟踪

  1. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Object.php 第 161 行 152153154155156157158159160161162163164165166167168169170
    */ 公共函数 __set($name, $value) { $setter = '设置' 。 $名称; if (method_exists($this, $setter)) { $this->$setter($value); } elseif (method_exists($this, 'get' . $name)) { throw new InvalidCallException('设置只读属性:' . get_class($this) . '::' . $name); } 别的 { throw new UnknownPropertyException('设置未知属性:' . get_class($this) . '::' . $name); } }

    /**

    • 检查是否设置了属性,即已定义且不为空。 *
    • 不要直接调用这个方法,因为它是一个 PHP 魔术方法,
    • 将在执行isset($object->property) 时被隐式调用。 *
  2. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\BaseYii.php 第 525 行 – yii\base\Object::__set('formats', ['application/json' => 'json'])
  3. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Object.php 第 105 行 – yii\BaseYii::configure(yii\filters\auth\HttpBearerAuth, ['only' => ['index', 'view', 'create', 'update', ...], 'formats' => ['application/json' => 'json']])
  4. yii\base\Object::__construct(['only' => ['index', 'view', 'create', 'update', ...], 'formats' => ['application/json ' => 'json']])
  5. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\di\Container.php 第 381 行 – ReflectionClass::newInstanceArgs([['only' => ['index', 'view', 'create', 'update', ...], 'formats' => ['application/json' => 'json']]])
  6. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\di\Container.php 第 156 行 – yii\di\Container::build('yii\filters\auth\HttpBearerAuth', [], ['only' => ['index', 'view', 'create', 'update', ...], 'formats' => ['application/json' => 'json']])
  7. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\BaseYii.php 第 344 行 – yii\di\Container::get('yii\filters\auth\HttpBearerAuth', [], ['only' => ['index', 'view', 'create', 'update', ...], 'formats' => ['application/json' => 'json']])
  8. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Component.php 第 667 行 – yii\BaseYii::createObject(['class' => 'yii\filters\auth\HttpBearerAuth', 'only' => ['index', 'view', '创建','更新',...],'格式' => ['应用程序/json' => 'json']])
  9. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Component.php 第 651 行 – yii\base\Component::attachBehaviorInternal(0, ['class' => 'yii\filters\auth\HttpBearerAuth', 'only' => ['index', 'view', 'create', 'update', ...], 'formats' => ['application/json' => 'json']])
  10. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Component.php 第 533 行 – yii\base\Component::ensureBehaviors()
  11. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Controller.php 第 272 行 – yii\base\Component::trigger('beforeAction', yii\base\ActionEvent)
  12. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\web\Controller.php 第 164 行 – yii\base\Controller::beforeAction(yii\rest\UpdateAction)
  13. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Controller.php 第 154 行 – yii\web\Controller::beforeAction(yii\rest\UpdateAction)
  14. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Module.php 第 523 行 – yii\base\Controller::runAction('update', ['id' => '1' ])
  15. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\web\Application.php 第 102 行 – yii\base\Module::runAction('products/update', ['id' => '1'])
  16. 在 D:\xampp\htdocs\connect\vendor\yiisoft\yii2\base\Application.php 中 第 380 行 – yii\web\Application::handleRequest(yii\web\Request)
  17. 在 D:\xampp\htdocs\connect\index.php 第 12 行 – yii\base\Application::run() 6789101112 要求(DIR . '/供应商/autoload.php');要求(目录。 '/vendor/yiisoft/yii2/Yii.php'); $config = 要求(目录 . '/config/web.php'); (new yii\web\Application($config))->run(); $_GET = [ 'id' => '1', ]; Yii 框架 2017-02-23, 09:31:51

Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 Yii Framework/2.0.11.2

控制器中的行为是

  public function behaviors() {
        return [
            [
                'class' => HttpBearerAuth::className(),
                'only' => ['index', 'view', 'create', 'update', 'search'],
                'formats' => ['application/json' => Response::FORMAT_JSON,],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'index' => ['get'],
                    'view' => ['get'],
                    'create' => ['post'],
                    'update' => ['PUT'],
                    'delete' => ['delete'],
                    'deleteall' => ['post'],
                    'search' => ['get']
                ],
            ]
        ];
    }

我正在使用 postman 对其进行测试,并在每个 api 中传递 Authorization

这是我的标题

可能是什么问题?

【问题讨论】:

    标签: php apache rest api yii


    【解决方案1】:

    错误很明显:HttpBearerAuth 类没有属性formats,因此以下行不应位于HttpBearerAuth 配置下:

    'formats' => ['application/json' => Response::FORMAT_JSON,],
    

    这是\yii\filters\ContentNegotiator 的属性。有关详细信息,请参阅Content Negotiation 上的文档

    【讨论】:

    • 我在标题中传递Content-Type : application/jsonAccept : application/json。我是否需要添加其他内容。医生说$ curl -i -H "Accept: application/json; q=1.0, */*; q=0.1" "http://localhost/users"
    • 我认为您不需要添加任何其他内容。试试看
    • 当我删除那行时,我得到了{"name":"Bad Request","message":"Invalid JSON data in request body: Syntax error.","code":0,"status":400,"type":"yii\\web\\BadRequestHttpException"}
    • 您的请求正文是 json 吗?
    • 我也在尝试用 curl 发送它。这是帖子字段。 CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nkapik sharma\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", 这是标题CURLOPT_HTTPHEADER => array( "accept: application/json", "authorization: Bearer 4p9mj82PTl1BWSya7bfpU_Nm8u07hkcB", "cache-control: no-cache", "content-type: application/json; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "postman-token: b0838a8c-9c3f-10bb-0556-5fc6c4f8ddc8" ),
    猜你喜欢
    • 2018-09-12
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多