yii2 html 2 doc

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 236
Зарегистрирован: 2018.05.10, 08:26

yii2 html 2 doc

Сообщение iamguruman »

Я использую немного халявный способ преобразования файла в формат ворда... это делаю так:

Код: Выделить всё

    public function actionOfferDescription($id){

        $model = $this->findModel($id);

        $html ="
            <div style='text-align: right; font-size: 15px;'>Приложение №{$model->position}</div>
            <div style='text-align: center; font-size: 20px;'>Карточка товара  №{$model->number}</div>
            <br>
            <br>
            {$model->offer_description}
            <p>Артикул: {$model->number}/{$model->position}</p>
        ";

        header("application/msword");
        header("Content-Disposition: attachment; filename=od_{$model->number}_{$model->position}.doc");
        header("Content-Transfer-Encoding: binary");
        echo $html;

    }
результат отличный: https://prnt.sc/rnci3u

но... есть маленькое но, которое не могу понять как разрешить:
вот такая вставка в конце документа:

Код: Выделить всё

An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in /home/.../domains/.../modules/.../controllers/GoodsController.php on line 55. in /home/.../domains/.../vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/.../domains/.../vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
#1 /home/../domains/.../vendor/yiisoft/yii2/web/ErrorHandler.php(135): yii\web\Response->send()
#2 /home/.../domains/.../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:
yii\web\HeadersAlreadySentException: Headers already sent in /home/..../domains/.../modules/.../controllers/GoodsController.php on line 55. in /home/../domains/.../vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/../domains/.../vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
#1 /home/../domains/.../vendor/yiisoft/yii2/base/Application.php(392): yii\web\Response->send()
#2 /home/../domains/.../web/index.php(31): yii\base\Application->run()
#3 {main}
55 строчка это: echo $html; - https://prnt.sc/rncj3x

не могу сообразить что нужно сделать... подскажите, пожалуйста
Последний раз редактировалось iamguruman 2020.03.26, 21:21, всего редактировалось 1 раз.
iamguruman
Сообщения: 236
Зарегистрирован: 2018.05.10, 08:26

Re: yii2 html 2 doc

Сообщение iamguruman »

самое главное забыл добавить...

такая ошибка появляется в случае если у меня есть вставленная картинка в формате png в виде data в тексте который хранится в переменной $html:

https://prnt.sc/rncrda

Код: Выделить всё

<p>Кант чехла, изготовлен из 100% хлопка&nbsp;сатинового переплетения</p>
<p>Страна изготовления: Россия</p>
<p>Артикул: 32008909160/1</p>
<p><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAALhCAYAAADB1daeAAAgAElEQVR4AezdiZYdt5G1bd3/ff1ft+f...
ошибка выводится в конце файла и выглядит файл вот так: https://prnt.sc/rncyju

Код: Выделить всё

AgfMEBADnrZkZEyBAgAABAgQIECBAgACBbQEBwDaZHQgQIECAAAECBAgQIECAwHkCAoDz1syMCRAgQIAAAQIECBAgQIDAtoAAYJvMDgQIECBAgAABAgQIECBA4DwBAcB5a2bGBAgQIECAAAECBAgQIEBgW0AAsE1mBwIECBAgQIAAAQIECBAgcJ6AAOC8NTNjAgQIECBAgAABAgQIECCwLSAA2CazAwECBAgQIECAAAECBAgQOE/gv9v8FAEHpFz0AAAAAElFTkSuQmCC" style="height:216px; margin-bottom:0px; margin-left:0px; margin-right:0px; margin-top:0px; width:300px" /></p>
            <p>Артикул: 32008909160/1</p>
        <pre>An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in /home/.../domains/.../modules/tenders/controllers/GoodsController.php on line 55. in /home/.../domains/.../vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/.../domains/.../vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response-&gt;sendHeaders()
#1 /home/.../domains/.../vendor/yiisoft/yii2/web/ErrorHandler.php(135): yii\web\Response-&gt;send()
#2 /home/.../domains/.../vendor/yiisoft/yii2/base/ErrorHandler.php(111): yii\web\ErrorHandler-&gt;renderException(Object(yii\web\HeadersAlreadySentException))
#3 [internal function]: yii\base\ErrorHandler-&gt;handleException(Object(yii\web\HeadersAlreadySentException))
#4 {main}
Previous exception:
yii\web\HeadersAlreadySentException: Headers already sent in /home/.../domains/.../modules/tenders/controllers/GoodsController.php on line 55. in /home/../domains/.../vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /home/.../domains/.../vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response-&gt;sendHeaders()
#1 /home/.../domains/.../vendor/yiisoft/yii2/base/Application.php(392): yii\web\Response-&gt;send()
#2 /home/....../domains/.../web/index.php(31): yii\base\Application-&gt;run()
#3 {main}</pre>
iamguruman
Сообщения: 236
Зарегистрирован: 2018.05.10, 08:26

Re: yii2 html 2 doc

Сообщение iamguruman »

ХА!

придумал костыль.... а может и не костыль...
по логике видимо после ехо что-то продолжает происходить...

я вот подумал может подойти к вопросу с точки зрения основ линукса... и чтобы я делал если бы писал приложение на си... и попробовать прекратить выполнение и через него вывести результат кода...

ну и получилось... как ни странно...

вот рабочий вариант:

echo заменил exit

Код: Выделить всё

        header("application/msword");
        header("Content-Disposition: attachment; filename=od_{$model->tender->number}_{$model->tender_position}.doc");
        header("Content-Transfer-Encoding: binary");
        exit($html);
        
объясните мне почему такое может быть?....

п.с. много интересных реализаций я видел формирования файла док... иногда это целые либы для пхп... ) и мне вспоминается Пельш с его "Угодай мелодию": "А я угодаю мелодию с четырех нот!"... :-)
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: yii2 html 2 doc

Сообщение urichalex »

return $html;
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: yii2 html 2 doc

Сообщение unknownby »

Любой метод/действие должно что-то возвращать, в плане того, что должен быть return, если его нет, то это уже процедура.
У тебя при нажатии на действие было отображение данных, а не возврат данных.
Ответить