Получаю ошибку:
An Error occurred while handling another error: yii\web\HeadersAlreadySentException: Headers already sent in.
Хотя пока писал этот пост понял что это не ошибка, а возвращаемое значение вместе с частью данных. Только все равно не понимаю почему. Есть Ajax
запускает следующий метод:
public function actionUpdateserver()
{
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->post();
$server = Server::findOne($data["id"]);
$server->serverName = $data['projectName'];
$server->rates = $data["gameRate"];
$server->idServerStatus = $data["serverStatus"];
$server->idGameVersion = $data["gameVersion"];
$server->dateOpen = Yii::$app->formatter->asDate($data["dateOpen"], "yyyy.MM.dd");
$server->dateOff = Yii::$app->formatter->asDate($data["dateOff"], "yyyy.MM.dd");;
$server->serverURL = $data["serverUrl"];
$server->website = $data['serverUrl'];
$server->id_openStatus = $data["openStatus"];
if($server->update())
{
echo $this->test();//json_encode(["saved", "newData" => ]);
}
else
{
echo json_encode($server->errors);
}
}
}.
Метод test
выглядит вот так:
private function test()
{
$main = new Main();
$filter = [];
$serverList = $main->getServersInfo($filter);
if(!array_key_exists("statuses", $filter))
$filter['statuses'] = 0;
return $this->renderAjax("adminTable", ['serverList' => $serverList]);
}.
И вьюха которую он вызывает:
<p>Список</p>
<input type="text" placeholder="Поиск">
<button class="btn-search"></button>
<div id="table">
<?php foreach ($serverList as $serverValue):?>
<div class="row block-cell">
<span class="cell"><a href="<?=$serverValue['serverURL']?>" id="urlserv"><?=$serverValue['serverName']?></a></span>
<span class="cell"><?=$serverValue['versionName']?> / <?=$serverValue['rates']?></span>
<span class="cell"><?php echo empty($serverValue['dateOpen']) ? "" : Yii::$app->formatter->asDate($serverValue['dateOpen'], "dd.MM.yyyy")?></span>
<span class="cell"><?php echo empty($serverValue['dateOff']) ? "" : Yii::$app->formatter->asDate($serverValue['dateOff'], "dd.MM.yyyy")?></span>
<span id="<?php echo ($serverValue['idServerStatus'] == 6 || $serverValue['idServerStatus'] == 3) ? "notvip":"hasvip"; ?>" class="cell"><?=$serverValue['statusName']?></span>
<span class="cell"><a class="getForm" href="<?=Yii::$app->urlManager->createUrl('admin-get-form');?>/<?=$serverValue['id']?>" id="edit">Изменить</a> <a href="" id="deleted">Удалить</a></span>
</div>
<?php endforeach;?>
</div>.
Данные обновляются вот так:
success:function(data) {
console.log(data);
$(".admin-table").html(data);
},
В конце обновленных данных получаю выше описанную ошибку в виде вставки в html разметку, логи ajax ответ 200. Не могу понять почему. Прошу подсказать.
Yii самостоятельно формирует заголовки страницы в момент отдачи контента, вы же используете функцию echo
, что моментально формирует заголовок, нарушая жизненный цикл Yii. Когда Yii формирует заголовок страницы, он обнаруживает, что заголовок уже послан и выдает соответствующую ошибку.
Забудьте про echo
внутри контроллеров фреймворков.
цитата из мануала:
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return [
'message' => 'hello world',
'code' => 100,
];
https://www.yiiframework.com/doc/guide/2.0/en/runtime-responses
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Столкнулся с проблемой постоянного изменения вывода массива, мой массив
Как переделать данный пример используя hasMany() вместо hasOne() для отображения в ячейке GridView нескольких связанных данных из другой таблицы?