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';
}
}