Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
资产中的Symfony2细枝自定义筛选器_Symfony_Twig_Absolute Path_Assetic - Fatal编程技术网

资产中的Symfony2细枝自定义筛选器

资产中的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" />

我在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" />
<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}”。否则,我会得到一个关于丢失“名称”的错误。