使用多个构造参数注入服务?

时间:2013-03-29 03:54:07

标签: php symfony

我已将dbal连接从控制器传递给执行大量查询和计算的类,如

$conn = $this->get('database_connection');
$stats = new Statistics($conn, $criteria);

这是正确的吗?为连接创建服务似乎没有帮助,因为我需要使用两个参数调用该类。是否有更好或更正确的方法来达到同样的目的?这种方法至少有效。

2 个答案:

答案 0 :(得分:2)

最好的方法是通过服务容器创建服务和加载。

<强> Services.yml

Acme.demo.statics:
        class:        Acme\DemoBundle\Handler\Statistics
        arguments:    [@database_connection,  { param1: %param1%, param2: %param1%}]

<强> Statistics.php

use Doctrine\DBAL\Connection;

class Statistics
{
    protected $connection;
    protected $parameters;

    public function __construct(Connection $connection, array $parameters)
    {
        $this->connection = $connection;
        $this->parameters = $parameters;
    }

答案 1 :(得分:0)

您是否可以控制Statistices类?

如果是,则从构造函数中删除条件,并实现setCriteria方法或将条件作为getResults或任何方法的一部分传递。

@Venu向您展示了使用参数传递数据的热点。如果您的条件数组可以提前设置,那么您可以使用它。但我猜这个标准是在请求期间建立的。

并且不要求Statistic成为服务。只是让事情变得容易一些。因此,如果您对现有代码感到满意,那么请不要担心。只是意味着你需要在想要制作连接对象时抓住它。这意味着如果你确实需要注入其他对象,那么你的代码就必须改变。