2016-05-12 2 views
0

У меня есть несколько фотографий в базе данных SQL Server в столбце BLOB.Silex + Twig + SQL Server: рендеринг изображений

Мне нужно получить их и показать на странице HTML.

Но в результате на HTML-странице у меня есть длинная строка в атрибуте src вместо изображений.

код Silex:

<!-- language-all: php --> 
$pict->get('/show_pic/{id}', function ($id) use ($app) { 
     //Request of photos 
     $photos=getPhotoByID($id, $app); 
     return $app['twig']->render('test/template_show_pictures.html.twig', array('photos'=>$photos)); 
})->bind('show_pic'); 

function getPhotoByID($ID, $app) 
{ 
     $sql = "<some SQL here>"; 
     $statement = $app['dbs']['mssql']->prepare($sql); 
     $statement->bindValue(1, $ID, "text"); 
     $statement->execute(); 
     $photo = $statement->fetchAll(); 

     if (empty($photo)) { 
      return "We don't have a photo with id=".$ID; 
     } 

     return $photo; 
} 

Twig файл:

<!-- language: twig --> 
    {% extends 'test/test_base.html.twig' %} 
    {% block title %}Pictures from DB{% endblock %} 
    {% block content %} 
    {% for im in photos %} 
     <img alt="Embedded Image" src="data:image/jpeg;base64,{{ im['Foto'] }}" /> 
    {% endfor %} 
    {% endblock %} 

HTML разметка:

<!-- language: lang-html --> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Pictures from DB</title> 
      <link rel="stylesheet" href="/css/print.css"> 
     </head> 
    <body> 
    <div class="page"> 
     <img alt="Embedded Image" src="data:image/jpeg;base64,���JFIF...too many symbols here" /> 
      </div> 
    </body> 
</html> 

Что с ней?

ответ

2

Вы должны кодировать изображение с base64

Добавить фильтр для кодирования в base64:

$app->extend('twig', function ($twig, $app) { 
    $twig->addFilter('base64_encode', new \Twig_SimpleFilter('base64_encode', function ($value) { 
     return \base64_encode($value); 
    })); 

    return $twig; 
}); 

и использовать его в шаблоне:

{{ im['Foto']|base64_encode }} 
Смежные вопросы