2

私はここにいるのは初めてで、私の質問があまりにも些細なことではないことを願っています。

静的クラス (Grid Builder) を含むパッケージがあり、symfony2 で使用したい

クラスのロードとサービスコンテナについては知っていますが、コンテナが機能しません。

Grid クラスは、他の 2 つの静的クラス (構成用と SQL クエリ用) に依存しています。

クラスを使用するコードは次のとおりです。

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

そして、クラスは内部的に GridConfig::database() のような呼び出しを使用するので、3 つのクラスすべてを 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 に答える