Since it took me quite some time to get this done today, I though I share this here for any others interested.
The goal is to retrieve images that have been stored in a protected directory (outside the web root). To this end, you need a action in your Controller:
/**
* Returns the Image
*/
public function actionGetImage($id, $inline) {
$model = Image::findOne($id);
$file = $model->path;
if (file_exists($file)) {
Yii::$app->response->sendFile($file, rand(10000000,99999999), ['mimeType' => 'image/jpeg', 'inline' => $inline]);
}
}
In your view, post the url to the action as your src:
Html::img(Yii::$app->urlManager->createUrl(['image/get-image', 'id' => $image->id, 'inline' => true]));
And that’s it! I simplified the code snippets and hope I didn’t make any mistakes in that process. Otherwise I think you’re able to figure it out Enjoy!