2016-11-01 2 views
1

на основе this постаSymfony2 веточки проверить, если удаленный образ существует

Я пытаюсь проверить, если удаленный образ существует (нагрузки правильно), и если это произойдет, отобразить его, othervise дисплея по умолчанию изображения. Я уже сделал расширение twig и исправил код, но он всегда возвращает false, хотя я определенно знаю, что изображение существует. Мой код шаблона ветви выглядит следующим образом:

{% 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 Моя функция прут выглядит следующим образом:

<?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

Каков код для вашей функции веточки? – Rooneyl

+0

является 'author.image' абсолютным путем изображения? вероятно, не – Federkun

+0

author.image - это удаленное изображение, например https://scontent.cdninstagram.com/t51.2885-15/s150x150/e35/14488260_1668659883445000_18272225396260864_n.jpg – Jack

ответ

1

Ну, Прут-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, чтобы проверить, существует ли ваше изображение.

+0

Спасибо, я попробую – Jack

Смежные вопросы