2015-04-07 2 views
3

Я пытаюсь создать собственный фильтр Twig. Я следовал за этим тутом Symfony Official Book. Но я получаю эту ошибку The filter "avatar" does not exist in src/Acme/Bundle/StoryBundle/Resources/views/Story/storyList.html.twigПользовательский фильтр 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'; 
     } 
    } 
} 

И мой AppBundle/Ресурсы/конфигурации/services.yml

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

шаблон, используя фильтр не в тот же набор, что и расширение Twig, но поскольку это сервис, это не должно быть проблемой. Вот как я это называю: {{ story.author|avatar }}

Вы хоть представляете, в чем проблема?

EDIT

# Twig Configuration 
twig: 
    debug:   "%kernel.debug%" 
    strict_variables: "%kernel.debug%" 
    globals: 
     uploadTmpDir: %upload.tmp.relative.dir% 
+2

ли отступом services.yml, как это? Если это так, вам нужно отложить '- {name: twig.extension}' еще 4 пробела. – qooplmao

+0

Да, выглядит странно, что ваш файл services.yml компилируется, я думал, что вы получите исключение «Невозможно определить элемент последовательности в случае отображения». –

+0

Файл services.yml имеет правильный отступ. Отступ сломался, когда я разместил его здесь – Hakim

ответ

0

Ok Я нашел решение. Вот services.yml

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

Я предполагаю, что имя функции должно иметь фильтр суффикс