Php HttpRequest及其行为没有名为“的方法或闭包”;getRawBody“;(Yii v1.1.8)

Php HttpRequest及其行为没有名为“的方法或闭包”;getRawBody“;(Yii v1.1.8),php,http,yii,frameworks,httprequest,Php,Http,Yii,Frameworks,Httprequest,我正在运行Yii v1.1.8(不是我知道的最新版本,但它是一个遗留项目)。当我运行以下代码时,我得到了以下错误 CHttpRequest and its behaviors do not have a method or closure named "getRawBody". 我正在运行的代码如下所示: function actionDoSomething() { $requestBody = Yii::app()->request->getRawBody(); } 我可

我正在运行Yii v1.1.8(不是我知道的最新版本,但它是一个遗留项目)。当我运行以下代码时,我得到了以下错误

CHttpRequest and its behaviors do not have a method or closure named "getRawBody".
我正在运行的代码如下所示:

function actionDoSomething() {
   $requestBody = Yii::app()->request->getRawBody();
}
我可以看到RawBody()函数在v1.1.13中可用-所以我认为我的版本不应该有任何问题?你知道我为什么会犯这个错误吗?

如评论中所述,对于yii版本,您不能使用此方法,因此您应该扩展HttpRequest以添加它:

components
文件夹中创建一个
HttpRequest
文件

class HttpRequest extends CHttpRequest
{

    /**
     * Returns the raw HTTP request body.
     * @return string the request body
     * @since 1.1.13
     */
    public function getRawBody()
    {
        static $rawBody;
        if($rawBody===null)
        $rawBody=file_get_contents('php://input');
        return $rawBody;
    }
}
并在配置文件中指定必须使用哪个请求组件

'components' => array(
    'request'=>array(
        'class' => 'HttpRequest',
    ),
),

1.1.13在1.1.8之后,因此该方法在您的YIOOPS版本中不存在。。。我的眼睛累了…我不确定是否可以更新版本。。。如果只在需要的单个控制器中本地添加这个确切的函数,或者通过为CHTTP::RequestHum创建扩展类来扩展现有类,这是可以接受的吗?我看到两个选择:或者更新整个框架,或者扩展类,但是真的不要只更新一个类如果你想要我可以发布一个关于如何扩展HttpRequest的答案我已经创建了一个名为HttpRequest.php的新文件并添加了上面的代码,我还将其添加到了配置中的组件数组中。当我运行同一个页面时,我得到了相同的CHttpRequest,它的行为没有名为“getRawBody”的方法或闭包错误,但是当我添加行var_dump(get_class_methods('HttpRequest'))时;退出;-我可以在数组中看到getRawBody函数??知道我为什么会出错吗?get_类(Yii::app()->request)的输出是什么吗?当我回显echo get_类时(Yii::app()->request);它说‘CHttpRequest’Ok,所以配置没有被应用,我仍然尝试使用CHttpRequest。在您的配置中,在导入中有components文件夹吗?(类似于“application.components.*”,)?并尝试清除运行时文件夹中的所有内容!我们的设置有多个配置文件(不要问为什么),我将其添加到不正确的配置文件中(现在没有错误:)以测试json-我是否只添加要直接输出的json。。抱歉,如果这个问题听起来有点像“noob”(更多信息,请参阅我1分钟后的原始帖子)。