基于this帖子
我正在尝试检查是否存在远程图像(正确加载),如果存在,则显示它,其他显示默认图像。我已经做了一个twig扩展并更正了代码,但它总是返回false,虽然我明确知道图像存在。我的twig模板代码如下:
{% if file_exists(author.image) %} //always get false here so the default image is loaded
<img src="{{ author.image }}" alt="{{ author.name }}">//loads an image correctly if outside condition
{% else %}
<img src="/var/www/web/img/no_image.png" alt="no_image">
{% endif %}
感谢任何帮助。谢谢。
UPD 我的twig功能如下:
<?php
namespace AppBundle\Twig\Extension;
class FileExtension extends \Twig_Extension
{
/**
* Return the functions registered as twig extensions
*
* @return array
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('file_exists', 'file_exists'),
);
}
public function getName()
{
return 'app_file';
}
}
答案 0 :(得分:1)
嗯,您创建的Twig-Extension使用PHP函数file_exists
,它仅适用于本地文件。
为了使其适用于远程文件,您需要像这样(未经测试)更改它:
<?php
namespace AppBundle\Twig\Extension;
class FileExtension extends \Twig_Extension
{
/**
* Return the functions registered as twig extensions
*
* @return array
*/
public function getFunctions()
{
return [
new \Twig_SimpleFunction('remote_file_exists', [$this, 'remoteFileExists']),
];
}
/**
* @param string $url
*
* @return bool
*/
public function remoteFileExists($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $status === 200 ? true : false;
}
public function getName()
{
return 'app_file';
}
}
?>
现在您应该能够使用Twig-Function remote_file_exists
来检查您的图像是否存在。