首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony1中的组件在Symfony2中相当于什么?

Symfony1中的组件在Symfony2中相当于什么?
EN

Stack Overflow用户
提问于 2011-05-22 19:07:31
回答 2查看 4.4K关注 0票数 20

在我的Symfony2应用程序中,我希望在不同的页面上显示一个小部件。这不能仅仅由它的模板定义,它需要调用DB并通过控制器。

在Symfony1中,我会创建一个组件并将其包含在内。我如何在Symfony2中做同样的事情?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-23 19:32:18

我做了更多的研究,我发现最简单的方法就是模板中的这行简单的代码:

代码语言:javascript
复制
{% render 'MyBundle:MyController:myAction' %}

这将使用该操作指定的模板输出该操作的结果。

票数 27
EN

Stack Overflow用户

发布于 2011-05-23 00:23:01

您可以使用widget函数创建Twig扩展并将其注册到容器中。还要将Kernel注入到这个扩展中。

代码语言:javascript
复制
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;
    }
}

然后在模板中写下:

代码语言:javascript
复制
{{ widget('QuestionsBundle:LastAnswers', {'answersCount' : 10}) }}
{# class QuestionsBundle/Widget/LastAnswers #}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6087507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档