我有一个具有返回HTML功能的类。
class MyParser {
public function getHTML() {
return '<a href="#">Hello World</a>';
}
}
然后在我的Twig模板中,我使用raw
过滤器输出文字HTML,而不是让Twig为我转义:
{{ myParserInstance.HTML | raw }}
是否有一种方法可以使函数(不是Twig Filter or Function)返回原始HTML并将其呈现为这样?或者我将如何创建一个Twig过滤器或函数来为我无缝地执行此操作?
例如,我不会想要类似的东西:
{{ render(myParserInstance) }}
相反,我希望能够使用HTML
函数调用。这是完全可能还是我坚持使用Twig功能或使用| raw
?
答案 0 :(得分:11)
您可以安全地返回和Twig_Markup对象对象...
class MyParser {
public function getHTML() {
$rawString = '<a href="#">Hello World</a>'
return new \Twig_Markup( $rawString, 'UTF-8' );
}
}
或
class MyParser {
public function getHTML() {
$rawString = '<a href="#">Hello World</a>'
return new \Twig\Markup( $rawString, 'UTF-8' );
}
}
答案 1 :(得分:1)
很快,不,没有。
Twig是渲染引擎,因此除非您使用 SELECT t.* FROM ( SELECT m.id, m.name FROM mine m ) t
过滤器或关闭Twig中的自动视图(see this answer),否则无论您从任何方法返回的内容都将被Twig解析并进行转义。
答案 2 :(得分:0)
我写这篇文章是为了支持SilvioQ的答案,这对我来说非常有用。
在我的情况下,我正在创建一个过滤器,用于在标题块中添加样式表标记,而不必担心硬编码base-url或者在不需要时将其作为参数传递给视图。 SilvioQ的代码工作得很好,有助于保持我的观点不那么混乱。
以下是我在代码中使用它的方法:
class AppExtension extends AbstractExtension { public function getFilters() { return array( new TwigFilter('css', array($this, 'cssLinkFilter')), ); } public function cssLinkFilter($cssName){ $link = sprintf('', getBaseURL(true), $cssName); return new \Twig_Markup($link, 'UTF-8'); } }
我还在努力,我还需要另一个Javascript。如果我改变我的代码或数字它不起作用我会更新我的答案。