2

次のようにアセットに写真を追加します。

{% image '@MyBundle/Resources/public/img/name.png' %} 
  <img src="{{ asset_url }}"/>
{% endimage %}

私にとっては問題なく動作しますが、あまり書きたくないので、symfony2 ドキュメントのような小枝関数を作成しようとしました。ただし、フィルターは使用しません。

assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    bundles:        [MyBundle]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
    twig:
        functions:
            timg: ~

しかし、私が今それを使用する場合:

<img src="{{ timg('@MyBundle/Resources/public/img/name.png') }}" />

私は例外を受け取ります:

テンプレートのコンパイル中に例外がスローされました ("Catchable Fatal Error: Argument 3 passed to Twig_Node_Expression_GetAttr::__construct() must be an instance of Twig_Node_Expression_Array, instance of Twig_Node given, called in C:\wamp2\www\symfony\ vendor\symfony\assetic-bundle\Symfony\Bundle\AsseticBundle\Twig\AsseticNodeVisitor.php の 66 行目で、C:\wamp2\www\symfony\vendor\twig\twig\lib\Twig\Node\Expression\GetAttr で定義されています。 "::top.html.twig" の php 行 14")。

何か案は?たぶん、フィルターなしで短い構文に関数だけを使用することはできませんか?

4

2 に答える 2

1

非常に単純なフィルターを定義して、次のように使用することをお勧めします{{ 'mypath'|timg }}

class ImgExtension extends \Twig_Extension
{
    private $asset;
    public function __construct(Container $c){
        $this->asset = $c->get('templating.helper.assets');
    }
    public function getFilters(){
        return array('timg' => new \Twig_Filter_Method($this, 'timg'));
    }
    public function timg($src, $package = null) {
        $url = $this->asset->getUrl($src, $package);
        return '<img src="'.$url.'" />';
    }
    public function getName(){
        return 'timg';
    }
}

alt次に、、、などの他の便利なパラメーターを追加できますtitle

于 2013-03-29T15:55:55.437 に答える