Есть ли способ использовать что-то вроде этого?Твиг-тег или функция внутри PHP String
$foo = "{{ object|filter }}";
Потому что я пытаюсь написать динамический преобразователь изображения, который должен выводить что-то вроде примера, но когда в моей веточке я использую {{ foo }}
, он просто выводит необработанную строку {{ object|filter }}
вместо executhing фильтра на объект по назначению.
Я пытался использовать {{ foo | raw }}
, но такой же результат.
То, что я пытаюсь сделать именно
CONTROLLER
$image = $em->getRepository('AcmeDemo:Media')->find($id);
$image_src = sprintf("{{ %s | imagine_filter('%s') }}", $image->getWebPath(), 'front_small');
return $this->render('image.html.twig', array(
'image_src' => $image_src
));
TWIG
<img src="{{ image_src }}"/>
Итак, у меня есть функция прут внутри переменной PHP $image_src
, что Функция Twig может быть, после форматирования sprintf
{{ '/uploads/foo.jpg' | imagine_filter('front_small') }}
.
То есть строка на данный момент, потому что внутри переменной PHP $image_src
, что переменная передается в шаблон Twig с именем image_src
так, сейчас это строка, как я уже говорил, если я
My variable contains "{{ image_src }}"
Он будет выводить строка, которая говорит:
My variable contains "{{ '/uploads/foo.jpg' | imagine_filter('front_small') }}"
Потому что, как я уже говорил, image_src
это просто строка, но я хочу, чтобы acutally выполнить в моей Twig, строку, содержит image_src
, потому что да, это строка (для глаз компилятора), но мы все это знаем или она притворяется функцией Twig (из-за синтаксиса).
Итак, почему | raw
не будет работа ?, потому что она inteded для использования с строки, содержащие HTML
код, если бы HTML
синтаксис это будет работать, но это Twig
синтаксис, так что он не работает.
Возобновление, должна существовать функция twig | compile
, которая выполняет код Twig внутри переменной, такой как | raw
, с HTML, но, поскольку эта функция не существует, мне интересно, есть ли способ ее достижения ...
Как @joshua сказал, это похоже на Javascript eval
.
Надеюсь, я хорошо объяснил, в чем проблема и что мне нужно.
EDIT
Я использовал свое собственное расширение прутого Compile
для того, чтобы достичь того, что мне было нужно.
class CompileExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
'compile' => new \Twig_Filter_Method($this, 'compile', array(
'needs_environment' => true,
'needs_context' => true,
'is_safe' => array('compile' => true)
)),
);
}
public function compile(\Twig_Environment $environment, $context, $string)
{
$loader = $environment->getLoader();
$compiled = $this->compileString($environment, $context, $string);
$environment->setLoader($loader);
return $compiled;
}
public function compileString(\Twig_Environment $environment, $context, $string)
{
$environment->setLoader(new \Twig_Loader_String());
return $environment->render($string, $context);
}
public function getName()
{
return 'compile';
}
}
UPDATE Принимая @Benjamin Paap ответ, потому что это именно то, что я хотел в этом случае с лучшим кодом, но мой заказ Twig класс работает для любой ситуации.
Вы пытаетесь использовать прутый фильтр в PHP или хотите вывод HTML из ваш пользовательский фильтр? Любой код? – Rooneyl
вы должны это прочитать, и '{{foo | raw}}' должен работать: http://twig.sensiolabs.org/doc/filters/raw.html –
вы хотите что-то вроде 'eval' javascript, не так ли? ? Я не думаю, что ребята из твинов добавили функцию, которая, возможно, опасна как «eval» в их проекте. – Joshua