Заголовки Уже отправили ошибку Yii2, ее невозможно устранить ни одним из предложенных методов

#json #yii2

Вопрос:

Это могут быть повторяющиеся вопросы, но я перепробовал все возможные методы для устранения этой ошибки в Yii2 без какого-либо успеха

У меня есть мой базовый контроллер и функция, как написано ниже в нем

      /**
     * Send given object as json object
     *
     * @param array $data
     * @return json
     */
    public function sendJsonResponse($data) {
        ob_start();
        ob_clean();
        header('Content-type: application/json');
        echo json_encode($data);
        die;
    }
 

Я вызываю эту функцию в любом из дочерних контроллеров, таких как

 return $this->sendJsonResponse(['message'=>'Some message here','status'=>true]);
 

При этом я постоянно получаю уже отправленные заголовки с ошибками, пробовал способы, предложенные сообществом Yii2, чтобы изменить echo для возврата и т. Д., Но тщетно.

Пожалуйста, предложите.

Комментарии:

1. вы не можете echo json_encode сейчас, это было в более старой версии Yii2

Ответ №1:

Попробуйте использовать return, а не echo, и избегайте die()

 public function sendJsonResponse($data) {
    ob_start();
    ob_clean();
    header('Content-type: application/json');
    return json_encode($data);
}
 

в любом случае проверьте, есть ли в вашем контроллере другое возвращаемое эхо od для другого значения в другой части кода, и выполните рефакторинг кода для avodi this. y вы должны отправить все значение только в одном возврате

Ответ №2:

@scaisEdge, спасибо за ваш ответ, по каким-то странным причинам предложенный вами метод не дает ожидаемых результатов всякий раз, когда мы используем ajax, не знаю, почему я так изменил свой метод, как указано ниже

 /**
 * Send given object as json object
 *
 * @param array $data
 * @return json
 */
public function sendJsonResponse($data) {
    Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;
    return $data;
}
 

Это работает, как и ожидалось, я опубликую подтверждение того, устраняет ли это ошибку headeralreadysent, которую я первоначально получил.

Комментарии:

1. Сейчас это работает, как и ожидалось.