У меня есть очень специализированный фильтр, который я хочу использовать для одной страницы, не делая его глобальным фильтром. Я попытался сделать это (то есть не функция, которую я хочу, это просто тест):Как добавить локальное расширение Twig с контроллера
$this->get('twig')
->addFilter(new \Twig_SimpleFilter('chgname', function ($string) {
return substr($string, 0, 5);
}));
Но я получаю сообщение об ошибке «Не удалось добавить фильтр в качестве расширения уже инициализирована».
Я знаю, что я могу создать класс в каталоге AppBundle/Twig и добавить его в качестве сервиса, но 1) Это невероятно тяжело и PITA для простого фильтра, который мне нужен, и 2) Он делает его глобальным для всего приложения, которое глупо для чего-то, что мне нужно локально.
Есть ли способ сделать это, или я придерживаюсь только глобальных расширений? Заранее спасибо.
Если вы хотите, чтобы это сделать локально, просто используйте 'substr()' в контроллере и передайте результат на веточку. – malcolm
Он сказал, что это не функция, которую он хочет. Я должен спросить op, хотя, что не так, используя его глобально для вашего пакета/приложения? Это правильный способ сделать это, это не тяжело, и какое это имеет значение, если оно «глобальное» или нет? –
Почему у вас локальные переменные? Почему бы не сделать их глобальными? Почему бы не сделать все функции глобальными? Ответ заключается в том, что плохой практикой является загрязнение вашего пространства имен функциями, которые не обязательно должны быть глобальными. В этом случае это очень специфическая функция форматирования для одной страницы, которая не применима нигде в приложении. Глупо сделать простую одноразовую глобальную функцию. – Nairebis