php - "An error occurred while handling another error: yii\web\HeadersAlreadySentException"

标签 php yii yii2

我正在尝试对基于 Yii 2 框架的留言簿应用程序提交评论。在我的 PC 上的本地主机上一切正常,但在共享主机上,当我想在 View 中提交评论时,出现此错误。

这里是错误:

An error occurred while handling another error:
    exception 'yii\web\HeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
    Stack trace:
    #0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
    #1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/ErrorHandler.php(135): yii\web\Response->send()
    #2 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))
    #3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))
    #4 {main}
    Previous exception:
    exception 'yii\web\HeadersAlreadySentException' with message 'Headers already sent in /home/mahdikas/public_html/guestbook/controllers/PostController.php on line 117.' in /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php:366
    Stack trace:
    #0 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
    #1 /home/mahdikas/public_html/guestbook/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Response->send()
    #2 /home/mahdikas/public_html/guestbook/web/index.php(12): yii\base\Application->run()
    #3 {main}

在 postController 中我有这段代码:

public function actionAdd_comment()
{
  //print_r($_POST);
  $model = new \app\models\Comments;
  if ($model->load(Yii::$app->request->post()) && $model->validate()) {
    $model->comment_date = date('Y-m-d H:i:s');
    if ($model->save()) {
      echo 'Thanks for your comment.';
    } else {
      echo 'Failed!';
    }
  }
}

错误中第117行是:

echo 'Thanks for your comment.';

我该如何解决这个问题?

最佳答案

从 Yii 2.0.14 开始,您不能在 Controller 中回显。必须返回响应:

public function actionAdd_comment() {
    $model = new \app\models\Comments();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $model->comment_date = date('Y-m-d H:i:s');
        if ($model->save()) {
            return 'Thanks for your comment.';
        } else {
            return 'Failed!';
        }
    }
}

您也可以调用exit在你的方法结束时防止进一步处理或用 ob_start() 包装你的代码和 ob_get_clean() ,如果您无法避免 echo 。

public function actionAdd_comment() {
    $model = new \app\models\Comments();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $this->someMagicWithEcho();
        exit;
    }
}

public function actionAdd_comment() {
    $model = new \app\models\Comments();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        ob_start();
        $this->someMagicWithEcho();
        return ob_get_clean();
    }
}

关于php - "An error occurred while handling another error: yii\web\HeadersAlreadySentException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49689315/

相关文章:

database - 多个父对象的注释

php - Yii2模块未配置! - 选项 : configFile are required error - codeception

php - 在现有文件中写入数据 Yii2 框架

ActiveForm 和 GridView 上的 Yii2 Pjax [让它工作起来]

PHP:如何获取用mod_rewrite 重写的URL?

javascript - Yii 页面上的 JavaScript

php - 无法在 HTML 中正确显示值

php - Beanstalk + Pheanstalk 延迟现有作业

php - 此 PDO::FETCH_ASSOC` 查询跳过返回的第一个结果

php - Visual Studio Code - 无法在不运行程序的情况下设置环境(或