Symfony2 and Twig - Check if an asset exists(Symfony2 和 Twig - 检查资产是否存在)
问题描述
I have a symfony2 project using twig templates.
I am displaying some images and would like to display the image only if the specific asset exists.
I have this:
{% if asset('bundles/sciforumversion2/images/logos/'~conf.img) %}
<img style="width: 60px; float:right; margin-right: 15px;" src="e3sgYXNzZXQo"bundles/sciforumversion2/images/logos/')}}{{ conf.img }}"/>
{% endif %}
But the if condition is always true.
Any idea please? Thank you.
If you want to check if an asset exists, you can create a Twig extension to implement the function.
PHP In your TwigExtension
directory, create AssetExistsExtension.php
with the following content:
<?php
namespace FuzTestBundleTwigExtension;
use SymfonyComponentHttpKernelKernelInterface;
class AssetExistsExtension extends Twig_Extension
{
private $kernel;
public function __construct(KernelInterface $kernel)
{
$this->kernel = $kernel;
}
public function getFunctions()
{
return array(
'asset_exists' => new Twig_Function_Method($this, 'asset_exists'),
);
}
public function asset_exists($path)
{
$webRoot = realpath($this->kernel->getRootDir() . '/../web/');
$toCheck = realpath($webRoot . $path);
// check if the file exists
if (!is_file($toCheck))
{
return false;
}
// check if file is well contained in web/ directory (prevents ../ in paths)
if (strncmp($webRoot, $toCheck, strlen($webRoot)) !== 0)
{
return false;
}
return true;
}
public function getName()
{
return 'asset_exists';
}
}
YML And here is the configuration, to put in your services.yml
file.
parameters:
(...)
fuz_tools.twig.asset_exists_extension.class: FuzTestBundleTwigExtensionAsset@ExistsExtension
services:
(...)
fuz_tools.twig.asset_exists_extension:
class: '%fuz_tools.twig.asset_exists_extension.class%'
arguments: ['@kernel']
tags:
- { name: twig.extension }
Twig To use this extension, on a twig file, use:
{% if asset_exists('bundles/fuztest/images/test.png') %}
Note: do not forget to replace namespaces to match with your project.
这篇关于Symfony2 和 Twig - 检查资产是否存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Symfony2 和 Twig - 检查资产是否存在
- Mod使用GET变量将子域重写为PHP 2021-01-01
- 正确分离 PHP 中的逻辑/样式 2021-01-01
- 带有通配符的 Laravel 验证器 2021-01-01
- 从 PHP 中的输入表单获取日期 2022-01-01
- Laravel 仓库 2022-01-01
- SoapClient 设置自定义 HTTP Header 2021-01-01
- PHP Count 布尔数组中真值的数量 2021-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 没有作曲家的 PSR4 自动加载 2022-01-01
- 如何定位 php.ini 文件 (xampp) 2022-01-01