在我的Symfony2应用程序中,我希望在不同的页面上显示一个小部件。这不能仅仅由它的模板定义,它需要调用DB并通过控制器。
在Symfony1中,我会创建一个组件并将其包含在内。我如何在Symfony2中做同样的事情?
发布于 2011-05-23 19:32:18
我做了更多的研究,我发现最简单的方法就是模板中的这行简单的代码:
{% render 'MyBundle:MyController:myAction' %}这将使用该操作指定的模板输出该操作的结果。
发布于 2011-05-23 00:23:01
您可以使用widget函数创建Twig扩展并将其注册到容器中。还要将Kernel注入到这个扩展中。
class WidgetFactoryExtension extends \Twig_Extension
{
protected $kernel;
public function __construct($kernel)
{
$this->kernel= $kernel;
}
public function getFunctions()
{
return array(
'widget' => new \Twig_Function_Method($this, 'createWidget', array('is_safe' => array('html'))),
);
}
public function createWidget($name, array $options = array())
{
list($bundle, $widget) = explode(':', $name);
$widgetClass = $this->kernel->getBundle($bundle)->getNamespace() . '\\Widget\\' . $widget;
$widgetObj = new $widgetClass();
$widgetObj->setContainer($this->kernel->getContainer());
if ($options) {
$widgetObj->setOptions($options);
}
return $widgetObj;
}
}然后在模板中写下:
{{ widget('QuestionsBundle:LastAnswers', {'answersCount' : 10}) }}
{# class QuestionsBundle/Widget/LastAnswers #}https://stackoverflow.com/questions/6087507
复制相似问题