【问题标题】:Widgets the Symfony waySymfony 方式的小部件
【发布时间】:2014-02-21 21:20:12
【问题描述】:

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

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

例如标签云小部件:

// 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 中最好的方法是什么?如何让widget的依赖由DI容器管理?

【问题讨论】:

标签: php templates symfony view widget


【解决方案1】:

你可以在树枝中使用:

{{ render (controller("AcmeDemoBundle:Default:widget")) }}

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

public function widgetAction()
{
    ...
    return array();
}

中呈现视图
Acme/DemoBundle/Resources/views/Default/widget.html.twig

当然,这有一个缺点,因为我相信当 Symfony 渲染主控制器的视图时,他必须对小部件的操作发出另一个内部请求。 通过这种方式,您可以将此操作用作任何其他操作,您可以访问任何服务、数据库,例如 Symfony 1.4 中的组件。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多