Использование Response::$isSent
свойство не является надежным. Работает до тех пор, пока все ок. Но если вы получите исключение во время генерации ответа (например, FPDF
может выдать исключение), вы снова получите HeadersAlreadySentException
, так как обработчик ошибок сбрасывает объект ответа и отправляет его снова. Насколько мне известно, единственное пуленепробиваемое решение - создать объект ответа дампа, который ничего не отправляет, и установить в качестве компонента response
:
class DumbResponse extends \yii\web\Response {
public function send() {
}
}
А в действии контроллера:
public function actionCreatePdf() {
Yii::$app->setComponents([
'response' => DumbResponse::class
]);
$pdf = new FPDF();
// ...
$pdf->Output('D', 'my.pdf');
}