LiipImagineBundle 默认图像
LiipImagineBundle default image
如果数据库中不存在文件,是否有显示默认图像的干净解决方案?我不需要检查文件是否存在于文件系统中,例如 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。
仅供将来参考,显示默认图像以防不存在:
content.twig.html
<img src="{{ vich_uploader_asset(user, 'File')|default_image|imagine_filter('thumbnail') }}" />
parameters.yml
parameters:
default_image_path: /uploads/nophoto.png
config.yml
twig:
globals:
default_image_path: "%default_image_path%"
services.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;
}
你可以用 javascript:
<img src="http://example.com/somejpg.jpg" onerror='this.onerror = null; this.src="./oops.gif"' />
这会在图片未加载时替换图片
一种方法是:
<object data="{{ vich_uploader_asset(user, 'file')|imagine_filter('thumbnail') }}" type="image/jpg">
<img src="url/default_image.jpg" />
</object>
我不知道 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';
}
如果数据库中不存在文件,是否有显示默认图像的干净解决方案?我不需要检查文件是否存在于文件系统中,例如 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。
仅供将来参考,显示默认图像以防不存在:
content.twig.html
<img src="{{ vich_uploader_asset(user, 'File')|default_image|imagine_filter('thumbnail') }}" />
parameters.yml
parameters:
default_image_path: /uploads/nophoto.png
config.yml
twig:
globals:
default_image_path: "%default_image_path%"
services.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;
}
你可以用 javascript:
<img src="http://example.com/somejpg.jpg" onerror='this.onerror = null; this.src="./oops.gif"' />
这会在图片未加载时替换图片
一种方法是:
<object data="{{ vich_uploader_asset(user, 'file')|imagine_filter('thumbnail') }}" type="image/jpg">
<img src="url/default_image.jpg" />
</object>
我不知道 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';
}