2

我是新来的,我希望我的问题不是太琐碎。

我有一个包含静态类的包(网格生成器)并想在 symfony2 中使用它

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

网格类依赖于 2 个其他静态类(一个用于配置,一个用于 SQL 查询)

使用该类的代码如下:

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

在内部,该类使用像 GridConfig::database() 这样的调用——所以我想也许我不能简单地将所有三个类添加到 Service.yml 中,但这并没有做任何事情。

所以我的问题是:如何以可以在控制器中使用它的方式注入静态类?有可能吗?如果有,最好的实践案例是什么?

感谢您的任何帮助。

4

2 回答 2

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();
于 2013-08-16T13:12:42.010 回答
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

于 2016-07-13T15:54:06.870 回答