3

私のプロジェクトでは、Web ルートの外に保護されたイメージがいくつかあります。

私のコントローラーでBinaryFileResponseは、表示したい画像の内容を返すルートを作成しました。

    /**
     * @Route("/protected/images/{filename}", name="protected_image")
     */
    public function getProtectedimage($filename)
    {
        //.. logic ..
        return new BinaryFileResponse($path);
    }

私のテンプレートでは、Twigpath()を使用してそのルートをレンダリングし、画像を表示します。

 <img src="{{ path('protected_image',{filename: myEntity.imagePath}) }}">

今、私はそのルートを一緒に使用して、次のようにサムネイルLiipImagineを適用して作成したいと考えています。filter

<img src="{{ path('protected_image',{filename: myEntity.imagePath}) | imagine_filter('my_thumb_filter') }}">

問題: 壊れたイメージとSource image not found in ..ログが常に表示されます。

LiipImagine戻るルートと併用できますBinaryFileResponseか?もしそうなら、どのように?

4

1 に答える 1

2

応答を返す前にフィルターを適用できます。ただし、このソリューションは効率的ではありません。リクエストごとにフィラーを適用するためCacheManager、バンドルで を利用してください。(非公開の画像でも機能するかどうかはまだわかりません。)

/**
 * @Route("/protected/images/{filename}", name="protected_image")
 */
public function getProtectedimage($filename)
{
    //.. logic ..


    /** @var \Liip\ImagineBundle\Binary\Loader\FileSystemLoader $loader */
    $loader = $this->get('liip_imagine.binary.loader.filesystem');

    /** @var \Liip\ImagineBundle\Imagine\Filter\FilterManager $filterManager */
    $filterManager = $this->get('liip_imagine.filter.manager');

    $filteredImageBinary = $filterManager->applyFilter(
        $loader->find('path/to/image'),
        'my_thumb_filter'
    );

    return new Response($filteredImageBinary->getContent(), 200, array(
        'Content-Type' => $filteredImageBinary->getMimeType(),
    ));
}
于 2015-12-15T16:07:14.720 に答える