2

小枝テンプレートを使用した symfony2 プロジェクトがあります。

いくつかの画像を表示していますが、特定のアセットが存在する場合にのみ画像を表示したいと考えています。

私はこれを持っています:

{% 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 条件は常に true です。

何かアイデアはありますか?ありがとうございました。

4

3 に答える 3

17

アセットが存在するかどうかを確認したい場合は、関数を実装するためのTwig 拡張機能を作成できます。

PHPTwig\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') %}

: プロジェクトに合わせて名前空間を置き換えることを忘れないでください。

于 2013-06-03T21:41:39.330 に答える
0

こんにちはミロス私はすでにこの質問にここで答えました: https://stackoverflow.com/a/14232207/875519

Twig エンジンを拡張して file_exists を登録するだけで、Twig テンプレート内でテストできるようになります ^^

于 2013-06-03T14:15:33.857 に答える