【问题标题】:Request parameter is not casted to object请求参数未强制转换为对象
【发布时间】:2018-10-28 15:22:18
【问题描述】:

我有一个简单的 API 调用,它应该接受来自 Message 类型的请求参数。我实际上在$data 中得到的是array

...

    /**
     * @param Message $data Message to push {@from body}
     *
     * @url POST uploadedFile
     * @return bool
     */
     public function uploadedFile(Message $data) {
        return $this->send(...);
     }

}

class Message
{
     /**
      * @var string */
     private $action;


     /**
      * @var array object to return
      */
     private $parameters;

     /**
      * @var array $type {@type int}
      */
     private $type;

     /**
      * @var string $message {@max 50}
      */
     private $message;
}

这是我的 json:

{
    "action": "test",
    "parameters": [],
    "type": [1,2],
    "message": "test"
}

这是我得到的错误:

Fatal error: Uncaught TypeError: Argument 1 passed to FCM::uploadedFile() must be an instance of Message, array given in ... on line 22

【问题讨论】:

  • 创建一个工厂来实例化Message(添加getter和setter)?这里的实际问题是什么?
  • 这是一个 API 调用,我使用 json 发送请求,但它未被识别为 Message 对象。 Restler 通常根据 PHP 注释参数进行强制转换。
  • 看方法的注释和名称,你这里是上传文件吗?还有用的是什么版本的restler?
  • 这只是一个通知,文件已上传。 Resler 是版本 3 RC6

标签: php rest api restler


【解决方案1】:

回答我自己的问题:要使自动转换为对象工作,必须打开 API 类的验证。这是通过这两个变量完成的:

// Excluding classes from validation
Defaults::$autoValidationForbiddenCalls = [ ... ];

// Version from which to auto validate (using PHPDocs)
Defaults::$mandatoryValidationFromVersion = 3;

我使用的类被排除在验证之外,因此 PHPDoc 被忽略了。

【讨论】:

  • 好!这个在外部很难找到,因为我们不知道 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2012-05-30
  • 1970-01-01
  • 2014-01-16
  • 2015-04-11
相关资源
最近更新 更多