Problem:
How do I embed custom HTML code (or scripts, etc.) into a page generated from a Twig template?
This is useful because:
For instance, if a page controller in Symfony 2 is used to generate a fancy widget, such as a calendar, you may want to have a way for the twig template to render this custom server-side generated code.
Solution:
Pass the customized html string into a parameter in the twig template (customcodeparam, in the example below), and use the raw filter when rendering, e.g.
{{ customcodeparam | raw }}
Detailed example:
This example is not 100% complete, but it should include enough code to convey the idea of how to embed custom code into a twig template. This example assumes that you're already familiar with PHP and Symfony 2, and are learning Twig.
Imagine that you have a twig template named 'something.twig':
{# MyBundle:Page:something.twig #}
{% extends 'MyBundle:Page:index.html.twig' %}
{% block body %}
<h1>My awesome custom server-side-generated widget</h1>
{{ customcodeparam | raw }}
{% endblock %}
And also imagine that there was a page controller that rendered the template:
public function renderSomethingAction(){
// replace the code below with your own
$widgetcode = "<a href='http://www.google.ca'>Go Google!</a>";
try {
return $this->render('MyBundle:Page:something.html.twig',
array(
'customcodeparam' => $widgetcode
));
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
The resulting rendered html in the body block would look similar to the following:
<h1>My awesome custom server-side-generated widget</h1>
<a href='http://www.google.ca'>Go Google!</a>
(Note that the above code snippet does not include the html generated by MyBundle:Page:index.html.twig)
No comments:
Post a Comment