我是新来的,我希望我的问题不是太微不足道。
我有一个包含静态类的包(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类? 是否可能,如果是,最佳实践案例是什么?
感谢您的帮助。
答案 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