资产中的Symfony2细枝自定义筛选器
我在Symfony2几乎是新手,我有一个小问题: 我正在开发一个电子邮件模板,它有txt和html部分(没有问题) 我唯一的“问题”是TWIG中资产的绝对路径 在我的email.html.twig文件中,我有如下内容:资产中的Symfony2细枝自定义筛选器,symfony,twig,absolute-path,assetic,Symfony,Twig,Absolute Path,Assetic,我在Symfony2几乎是新手,我有一个小问题: 我正在开发一个电子邮件模板,它有txt和html部分(没有问题) 我唯一的“问题”是TWIG中资产的绝对路径 在我的email.html.twig文件中,我有如下内容: {% set abs = app.request.scheme ~ '://' ~ app.request.host %} <img src="{{ abs ~ 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" />
<?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);
}
}
但它使用相对路径写入路由
我发现了一个添加绝对路径的小解决方案,如下所示:
{% 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" />
<?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);
}
}
{%set abs=app.request.scheme~':/'~app.request.host%}
它起作用了!但是我想改进这个解决方案,并学习创建自定义过滤器(我阅读了文档,但有点迷路)
我想创建如下内容:
{% 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" />
<?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);
}
}
但我不知道如何正确覆盖Assets扩展。你能帮我吗
非常感谢 嗯,复制粘贴解决方案有点困难,但我可以制作一本简短的食谱,这样你就可以一步一步地自己做: 1) 您必须实现Assetic/Filter/FilterInterface 2) 如果查看FilterInterface类,您将看到必须实现两个方法:filterLoad和filterDump 因此,您将执行以下操作:
{% 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" />
<?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);
}
}
然后你把它叫做“你为你的新资产过滤器选择的名字”,当然。嗨,伙计!我知道如何创建细枝过滤器(不过还是要谢谢你)。问题是,我不知道如何编写必要的代码:如何覆盖资产扩展以添加协议和站点主机。嗯,我不确定如何覆盖某些现有的Asset扩展,但如果您只需要一个新的扩展,就可以在YourAssetFilter类中获得关于协议和站点主机的数据。但我不知道这是否有帮助…我们将在我可以尝试您的解决方案时返回此帖子以获取反馈。感谢您的时间,我们将看看它是否可以工作。您可能需要通过services.yml将一些服务注入到您的AsseticFilter中,然后获取带有您的AsseticFilter构造函数的适当对象,因为您需要获取协议和站点主机。。。如果不检查Symfony的哪一部分保存了这些数据,我就不知道了,但我猜逻辑与您在某些服务中需要条令时的情况类似。例如,我想你已经知道如何在服务中注入条令。如果你找不到解决方案,我们可以用谷歌搜索,我们肯定会找到解决方案。祝你好运:)我必须使用一个标记,设置为“{name:assetic.filter,alias:myAlias}”。否则,我会得到一个关于丢失“名称”的错误。