0

次のように、コントローラーから多数のクエリと計算を実行するクラスに dbal 接続を渡しました。

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

これは適切ですか?2 つのパラメーターを使用してクラスを呼び出す必要があるため、接続用のサービスを作成しても役に立たないようです。同じ目的を達成するためのより良い、またはより適切な方法はありますか? この方法は少なくとも機能します。

4

2 に答える 2

2

最善の方法は、サービスを作成し、サービス コンテナーを介してロードすることです。

Services.yml

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

統計.php

use Doctrine\DBAL\Connection;

class Statistics
{
    protected $connection;
    protected $parameters;

    public function __construct(Connection $connection, array $parameters)
    {
        $this->connection = $connection;
        $this->parameters = $parameters;
    }
于 2013-03-29T06:01:18.277 に答える
0

Statistices クラスを制御できますか?

その場合は、コンストラクターから基準を削除し、setCriteria メソッドを実装するか、getResults またはその他のメソッドの一部として基準を渡します。

@Venu が示すのは、パラメーターを使用してデータを渡すのが熱かったことです。条件配列を事前に設定できる場合は、それを使用できます。しかし、私はその基準がリクエスト中に構築されていると推測しています。

また、Statistic がサービスになる必要はありません。物事を少し簡単にするだけです。したがって、既存のコードに満足している場合は、心配する必要はありません。ただ、接続オブジェクトを作成したいときはいつでも接続オブジェクトを取得する必要があることを意味します。つまり、他のオブジェクトを注入する必要がある場合は、コードを変更する必要があります。

于 2013-03-29T13:24:19.653 に答える