Difference between #46 and #54 of
Yii v2 snippet guide II

Changes

Title unchanged

Yii v2 snippet guide II

Category unchanged

Tutorials

Yii version unchanged

2.0

Tags unchanged

tutorial,beginner,yii2,snippets

Content changed

**Intro**
 
---
 
Hi. I had to split my article as max length was reached. Check my previous articles here (mainly the 1st one):
## My articles
 
Articles are separated into more files as there is the max lenght for each file on wiki.
-* [Yii v1 for beginners](https://www.yiiframework.com/wiki/25520/yii-v2-snippet-guidefor-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/25052/yii-for-beginnersv2-snippet-guide)
 
* [Yii v2 snippet guide II
](https://www.yiiframework.com/wiki/25058/yii-for-beginnersv2-snippet-guide-ii) -* [Yii v2 snippet guide III](https://www.yiiframework.com/wiki/4622567/yii-for-beginners-2](https://www.yiiframework.com/wiki/462/yii-for-beginners-2v2-snippet-guide-iii)
 
* [Začínáme s PHP frameworkem Yii2 (I) česky - YouTube](https://youtu.be/ub06hNoL8B8
)

**Connection to MSSQL**
[...]
// https://stackoverflow.com/questions/25600048/what-is-the-difference-between-with-and-joinwith-in-yii2-and-when-to-use-them

$query = Invoice::find()->joinWith('company
Relation');

// Appending new sortable column:
[...]
'default' => SORT_ASC
];
   // ...   if (trim($this->company_name)!=='') { $query->andFilterWhere(['like', 'table.column', $this->company_name]); }
 
```
  }
 
  }
 
```
 
 
**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).
4 0
3 followers
Viewed: 68 817 times
Version: 2.0
Category: Tutorials
Written by: rackycz
Last updated by: rackycz
Created on: Aug 26, 2020
Last updated: 2 years ago
Update Article

Revisions

View all history