Symfony2 Twig资产中的自定义过滤器

时间:2013-05-21 09:28:31

标签: symfony twig absolute-path assetic

我在Symfony2中几乎是新手,我有一个小问题:

我正在开发一个电子邮件模板,它有txt和html部分(没问题)

我遇到的唯一“问题”是TWIG中资产的绝对路径。

在我的email.html.twig文件中,我有类似的内容:

<img src="{{ asset('images/my-image.png') }}" alt="My image" />但它用相对路径写出路线。

我发现了一个添加绝对路径的小解决方案,如下所示:

{% set abs = app.request.scheme ~  '://' ~ app.request.host %}
<img src="{{ abs ~ asset('images/my-image.png') }}" alt="My image" />

有效!但我想改进这个解决方案,并学习创建自定义过滤器(我阅读文档,但我有点迷失)

我想创建这样的东西:

<img src="{{ asset('images/my-image.png' | absolute) }}" alt="My image" />

但我不知道如何正确覆盖资产扩展。你能救我吗?

非常感谢!!

1 个答案:

答案 0 :(得分:1)

嗯,复制粘贴解决方案有点难,但我可以制作一个简短的食谱,这样你就可以一步一步地自己动手做:

1)您必须实现Assetic / Filter / FilterInterface

2)如果查看FilterInterface类,您将看到必须实现两个方法:filterLoad和filterDump。

所以,你会做这样的事情:

<?php

namespace You\YourBundle\Assetic\Filter;

use Assetic\Asset\AssetInterface;
use Assetic\Filter\FilterInterface;

class YourAsseticFilter implements FilterInterface
{ 
    public function filterLoad(AssetInterface $asset)
    {

          // do something

    }


    public function filterDump(AssetInterface $asset)
    {
        $content = $asset->getContent();

        // do something

        $asset->setContent($content);
    }


}

在您完成此操作后,您需要在YourBundle中的services.yml中注册twig扩展名。当然,如果您使用YML,XML ...配置,它会取决于它。我使用yml所以我将在yml中输入:)

parameters:
    your_bundle.class: You\YourBundle\Assetic\Filter\YourAsseticFilter

services:
    your_bundle.assetic.your_assetic_filter:
        class: %your_bundle.class%
        tags:
            - { name: assetic.filter }
            - { alias: yourChosenNameForYourNewAsseticFilter }

然后你称之为|你当然是yourChosenNameForYourNewAsseticFilter。