首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Widgets的Symfony方式

Widgets的Symfony方式
EN

Stack Overflow用户
提问于 2014-02-22 05:20:12
回答 1查看 787关注 0票数 0

创建可重用小部件的“Symfony方法”是什么?

我所说的小部件是指具有在PHP中定义的行为和可以在不同页面(控制器操作)上呈现的相关模板的对象。

例如,标签云小部件:

代码语言:javascript
复制
// TagCloudWidget.php

class TagCloudWidget {

    /** @var PDO */
    private $connection;

    public function __construct(PDO $connection)
    {
        $this->connection = $connection;
    }

    public function render()
    {
        $tags = $this->connection->query("SELECT * FROM tags ORDER BY name");
        $tags->setFetchMode(PDO::FETCH_CLASS, "Tag");
        include __DIR__ . "/TagCloudWidget.html.php";
    }

}

// TagCloudWidget.html.php

<div class="tag-cloud">
    <?php foreach ($tags as $tag) { ?>
        <span class="tag" style="font-size: <?php echo $tag->importance; ?>px;"><?php echo $tag->name; ?></span>
    <?php } ?>
</div>

在Symfony中做这件事最好的方法是什么?如何让微件的依赖项由DI容器来管理?

EN

回答 1

Stack Overflow用户

发布于 2014-02-22 19:43:09

您可以在twig中使用:

代码语言:javascript
复制
{{ render (controller("AcmeDemoBundle:Default:widget")) }}

在控制器中实现一个Action方法。这个控制器不需要定义路由,但它必须呈现一个视图。

代码语言:javascript
复制
public function widgetAction()
{
    ...
    return array();
}

中呈现视图的

代码语言:javascript
复制
Acme/DemoBundle/Resources/views/Default/widget.html.twig

当然,这也有不利的一面,因为我认为,当Symfony呈现主控制器的视图时,他必须对小部件的操作发出另一个内部请求。通过这种方式,您可以将此操作用作任何其他操作,您可以访问任何服务、数据库,就像Symfony 1.4中的组件一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21945403

复制
相关文章

相似问题

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