Symfony2 +注入静态类

时间:2013-08-16 09:46:11

标签: symfony dependency-injection static-classes

我是新来的,我希望我的问题不是太微不足道。

我有一个包含静态类的包(Grid Builder),并希望在symfony2中使用它

所以我知道类加载和服务容器,但我没有让Container工作。

Grid Class依赖于其他2个静态类(一个用于配置,一个用于SQL Query)

使用该类的代码如下:

$Grid = Grid::get_instance();
$Grid->table('products');
echo $Grid->renderGrid();

在内部,类使用GridConfig :: database()之类的调用 - 所以我想也许我可以简单地将所有三个类添加到Service.yml但是没有做任何事情。

所以我的问题是:如何以一种我可以在Controller中使用它的方式注入Static类? 是否可能,如果是,最佳实践案例是什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

因为它是静态的,所以确实没有必要注入它。类似的东西:

$grid = \Grid::get_instance;

应该有效。如果Grid使用名称空间,那么您还需要添加名称空间。您需要确保自动加载器能够找到它。

当然使用全局变量有点皱眉。你可以做的就是编写自己的服务来充当包装器。

class MyGridService 
{
    protected $grid;

    public function getInstance()
    {
        if (!$this->grid) $this->grid = \Grid::get_instance();
        return $this->grid;
    }
}

将MyGridService添加到services.yml文件中,然后从您可以执行的控制器中添加:

$grid = $this->get('my_grid_service')->getInstance();

答案 1 :(得分:0)

您应该定义一个使用工厂方法实例化对象的服务:

service_name:
    class: The\Class\Name\Of\The\Created\Object
    factory: [ "Grid", "get_instance" ]

现在,您可以通过注入服务将对象注入到依赖类中。

请参阅http://symfony.com/doc/current/components/dependency_injection/factories.html