-1

如果数据库中不存在文件,是否有一个干净的解决方案来显示默认图像?我不需要检查文件是否存在于文件系统中,例如file_exists.

请看下面的代码:

{% if user.file %}
    <img src="{{ vich_uploader_asset(user, 'file')|imagine_filter('thumbnail') }}" />
{% else %}
    <img src="url/default_image.jpg" />
{% endif %}

每次都必须检查模板中隐藏代码的每个图像。

有什么方法可以扩展imagine_filter 或任何其他解决方案(可能是服务)?

更新: 我认为该线程已关闭。另外,我报告了一个 LiipImagineBundle 错误 #749。

仅供将来参考,以显示默认图像以防万一它不存在:

内容.twig.html

<img src="{{ vich_uploader_asset(user, 'File')|default_image|imagine_filter('thumbnail') }}" />

参数.yml

parameters:
    default_image_path: /uploads/nophoto.png

配置.yml

twig:
    globals:
        default_image_path: "%default_image_path%"

服务.yml

services:
    app.twig.app_extension:
        public:    false
        class:     AppBundle\Twig\AppExtension
        arguments: ['@markdown', '%app_locales%', '@service_container']
        tags:
            - { name: twig.extension }

AppBundle/Twig/AppExtension.php

namespace AppBundle\Twig;

use AppBundle\Utils\Markdown;
use Symfony\Component\Intl\Intl;
use Symfony\Component\DependencyInjection\ContainerInterface;

class AppExtension extends \Twig_Extension
{
    /**
     * @var Markdown
     */
    private $parser;

    /** @var ContainerInterface */
    protected $container;    

    /**
     * @var array
     */
    private $locales;

    public function __construct(Markdown $parser, $locales, ContainerInterface $container)
    {
        $this->parser = $parser;
        $this->locales = $locales;
        $this->container = $container;
    }

    /**
     * {@inheritdoc}
     */
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('default_image', array($this, 'getDefaultImage') ),
        );
    }


    public function getDefaultImage(string $path = null)
    {
        $defaultImagePath = $this->container->getParameter('default_image_path');
        return $path ? $path : $defaultImagePath;
    }   
4

3 回答 3

0

你可以用javascript做到这一点:

<img src="http://example.com/somejpg.jpg" onerror='this.onerror = null; this.src="./oops.gif"' />

这将替换未加载的图像

于 2016-06-30T18:25:17.083 回答
0

一种方法也是:

<object data="{{ vich_uploader_asset(user, 'file')|imagine_filter('thumbnail') }}" type="image/jpg">
    <img src="url/default_image.jpg" />
</object>
于 2016-06-30T20:00:51.393 回答
0

我不知道 VichUploaderBundle 是否可以很好地处理没有文件的用户,但是您是否尝试过创建自己的 Twig 过滤器?看起来像:

<img src="{{ vich_uploader_asset(user, 'file')|default_image|imagine_filter('thumbnail') }}" />

然后在您的自定义 Twig 扩展中:

public function getDefaultImage(string $path)
{
    return $path ? $path : 'url/default_image.jpg';
}
于 2016-07-01T09:22:20.007 回答