我在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" />
但我不知道如何正确覆盖资产扩展。你能救我吗?
非常感谢!!
答案 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。