Php 调用时未找到自定义细枝筛选器

Php 调用时未找到自定义细枝筛选器,php,symfony,filter,twig,Php,Symfony,Filter,Twig,我正在尝试创建自己的细枝过滤器。我跟着这首芭蕾舞。 但是我得到了这个错误过滤器“avatar”在src/Acme/Bundle/StoryBundle/Resources/views/Story/storyList.html.twig中不存在 这是我的AvatarExtension.php <?php namespace AppBundle\Twig; class AvatarExtension extends \Twig_Extension { public function

我正在尝试创建自己的细枝过滤器。我跟着这首芭蕾舞。 但是我得到了这个错误
过滤器“avatar”在src/Acme/Bundle/StoryBundle/Resources/views/Story/storyList.html.twig中不存在

这是我的AvatarExtension.php

<?php

namespace AppBundle\Twig;

class AvatarExtension extends \Twig_Extension
{
    public function getFilters()
    {

        return array(
            new \Twig_SimpleFilter('avatar', array($this, 'avatar')),
        );

    }

    public function getName()
    {
        return 'avatar_extension';
    }

    public function avatar($user)
    {
        if ($user->getPicture() && $user->getPicture() != '') {
            return $user->getPicture();
        } else {
            return '/images/default-avatar.jpg';
        }
    }
}
使用筛选器的模板与Twig扩展不在同一个捆绑包中,但由于它是一个服务,所以不应该是问题。 我这样称呼它:
{{story.author | avatar}}

你知道可能是什么问题吗

编辑


好的,我找到了解决办法。这是服务

services:
    app.twig.avatar_extension:
        class: AppBundle\Twig\AvatarExtension
        tags:
        – { name: twig.extension }
app.twig.avatar_extension:
        class: AppBundle\Twig\AvatarExtension
        tags:
            - { name: twig.extension }
这是ExtensionClass:

<?php

namespace AppBundle\Twig;

class AvatarExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('avatar', array($this, 'avatarFilter')),
        );
    }

    public function avatarFilter($user)
    {
        if ($user->getPicture() && $user->getPicture() != '') {
            return $user->getPicture();
        } else {
            return '/images/default-avatar.jpg';
        }
    }

    public function getName()
    {
        return 'avatar_extension';
    }
}

services.yml是这样缩进的吗?如果您需要将
-{name:twig.extension}
缩进另外4个空格。是的,您的services.yml文件正在编译,这看起来很奇怪,我想您会得到“映射时无法定义序列项”异常。services.yml文件正确缩进。当我将其发布到此处时,缩进中断尝试清除缓存检查服务是否由
php应用程序/控制台容器:debug | grep'app.twig.avatar_extension'
正确加载,然后检查您是否已经注册了另一个同名的twig扩展。希望这有帮助。
<?php

namespace AppBundle\Twig;

class AvatarExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('avatar', array($this, 'avatarFilter')),
        );
    }

    public function avatarFilter($user)
    {
        if ($user->getPicture() && $user->getPicture() != '') {
            return $user->getPicture();
        } else {
            return '/images/default-avatar.jpg';
        }
    }

    public function getName()
    {
        return 'avatar_extension';
    }
}