symfony2 twig检查是否存在远程图像

时间:2016-11-01 09:47:32

标签: php symfony twig

基于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';
 }
}

1 个答案:

答案 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来检查您的图像是否存在。