У меня есть проект 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 ^^