Comparing
#48 with
#56
Content
**Intro**
---
Hi. I had to split my artic## My articles
Articles are separated into more file
s as
max length was reached. Check my previous articles here (mainly the 1st one):
- [there is the max lenght for each file on wiki.
* [Yii v1 for beginners](https://www.yiiframework.com/wiki/250/yii-for-beginners)
* [Yii v1 for beginners 2](https://www.yiiframework.com/wiki/
255462/yii-
for-beginners-2)
* [Yii v2
- snippet
- guide
I](https://www.yiiframework.com/wiki/2552/yii-v2-snippet-guide)
-* [
Yii v2 snippet guide II](https://www.yiiframework.com/wiki/25
058/yii-
for-beginnersv2-snippet-guide-ii)
* [Yii v2 snippet guide III](https://www.yiiframework.com/wiki/25
067/yii-
for-beginnersv2-snippet-guide-iii)
* [Začínáme s PHP frameworkem Yii2 (I) česky - YouTube](https://youtu.be/ub06hNoL8B8)
-* [
https://www.yiiframework.com/wiki/462/yii-for-beginners-2](https://www.yiiframework.com/wiki/462/yii-for-beginners-2Yii2 App Basic Plus](https://gitlab.com/radin.cerny/yii2-app-basic-plus) ... a compilation of the most used functionalities
* [VueJs3 PWA demo plus](https://gitlab.com/radin.cerny/vuejs3-pwa-demo-plus) ... a basic installable PWA project (written in JavaScript, VueJS3) for my REST offline clients (only 1 data transfer per day)
## The repository
All that you see in this Wiki is used in my Yii2 demo application. Just clone it and you are ready to start. Feel free to use it.
* [Yii2 App Basic Plus](https://gitlab.com/radin.cerny/yii2-app-basic-plus)
**Connection to MSSQL**[...]
}
}
```
**Sending binary data as a file to browser - decoded base64**
---
In my tutorial for Yii v1 I presented following way how to send headers manually and then call exit(). But calling exit() or die() is not a good idea so I discovered a better way in Yii v2.
See chapter [Secured (secret) file download](https://www.yiiframework.com/wiki/462/yii-for-beginners-2)
Motivation: Sometimes you receive a PDF file encoded into a string using base64. For example a label with barcodes from FedEx, DPD or other delivery companies and your task is to show the label to users.
For me workes this algorithm:
```php
$pdfBase64 = 'JVBERi0xLjQ ... Y0CiUlRU9GCg==';
// First I create a fictive stream in a temporary file
// Read more about PHP wrappers:
// https://www.php.net/manual/en/wrappers.php.php
$stream = fopen('php://temp','r+');
// Decoded base64 is written into the stream
fwrite($stream, base64_decode($pdfBase64));
// And the stream is rewound back to the start so others can read it
rewind($stream);
// This row sets "Content-Type" header to none. Below I set it manually do application/pdf.
Yii::$app->response->format = Yii::$app->response::FORMAT_RAW;
Yii::$app->response->headers->set('Content-Type', 'application/pdf');
// This row will download the file. If you do not use the line, the file will be displayed in the browser.
// Details here:
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#Downloads
// Yii::$app->response->headers->set('Content-Disposition','attachment; filename="hello.pdf"');
// Here is used the temporary stream
Yii::$app->response->stream = $stream;
// You can call following line, but you don't have to. Method send() is called automatically when current action ends:
// Details here:
// https://www.yiiframework.com/doc/api/2.0/yii-web-response#sendContentAsFile()-detail
// return Yii::$app->response->send();
```
**Note:** You can add more headers if you need. Check my previous article (linked above).