Symfony2 и Twig – проверьте, существует ли актив

У меня есть проект symfony2 с использованием шаблонов twig.

Я показываю некоторые изображения и хочу отображать изображение только в том случае, если существует конкретный актив.

У меня есть это:

{% if asset('bundles/sciforumversion2/images/logos/'~conf.img) %} <img style="width: 60px; float:right; margin-right: 15px;" src="{{ asset('bundles/sciforumversion2/images/logos/')}}{{ conf.img }}"/> {% endif %} 

Но условие if всегда верно.

Любая идея, пожалуйста? Спасибо.

Если вы хотите проверить, существует ли актив, вы можете создать расширение Twig для реализации функции.

PHP В вашем каталоге Twig\Extension создайте AssetExistsExtension.php со следующим содержимым:

 <?php namespace Fuz\TestBundle\Twig\Extension; use Symfony\Component\HttpKernel\KernelInterface; 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 И вот конфигурация, чтобы поместить в ваш файл services.yml .

 parameters: (...) fuz_tools.twig.asset_exists_extension.class: Fuz\TestBundle\Twig\Extension\Asset@ExistsExtension services: (...) fuz_tools.twig.asset_exists_extension: class: '%fuz_tools.twig.asset_exists_extension.class%' arguments: ['@kernel'] tags: - { name: twig.extension } 

Twig Чтобы использовать это расширение, в файле twig используйте:

 {% if asset_exists('bundles/fuztest/images/test.png') %} 

Примечание . Не забудьте заменить пространства имен в соответствии с вашим проектом.

В вашем коде есть опечатка:

 fuz_tools.twig.asset_exists_extension.class: Fuz\TestBundle\Twig\Extension\AssetsExistsExtension 

должно быть

 fuz_tools.twig.asset_exists_extension.class: Fuz\TestBundle\Twig\Extension\AssetExistsExtension 

Привет Милос Я уже ответил на этот вопрос здесь: https://stackoverflow.com/a/14232207/875519

Просто зарегистрируйте file_exists, расширив движок Twig, а затем вы сможете протестировать внутри шаблонов Twig ^^