1

バンドルが RESTful サービスを使用し、2 つの異なる PHP HTTP クライアント ( guzzle / guzzleとkriswallsmith/Buzz ) で動作するとします。アダプターとインターフェースを使用するためです。

この依存関係をオプションとして定義するにはどうすればよいですか? たとえば、コンパイラパスでこのようなことをしますか?

if(!is_file('/path/to/guzzle') && !is_file('/path/to/buzz')) {
    throw new \RuntimeException('You need to install guzzle or Buzz browser.');
}

これは、バンドルのオプションの依存関係を定義する正しい方法ですか?

4

1 に答える 1

2

まず、主にファイルがあるパスに存在するかどうかのチェックが機能しないため、上記のようにはしません。ユーザーが (なんらかの理由で) 別の場所にそれらをインストールし、名前空間を正しく取得できた場合はどうなるでしょうか?

私の最初の質問は、ユーザーに選択してもらいたい理由です。違いはありますか?ユーザーは、使用するクライアントを決定することさえできますか? たとえば、アセットを使用する場合、もちろん、どのフィルターを使用するかを決定する必要があります。これは、何が起こるかに大きな影響を与えるためです (たとえば、scss ファイルがある場合、フィルターが少ないと役に立ちません)。

ユーザーが自分で依存関係を管理しなければならないような問題は他にもあります。これは価値がある場合もあれば、そうでない場合もあります。

ここで、ユーザーに選択してもらいたい場合は、ユーザーがストリングガズルまたはストリングバズを渡す構成オプションを選択します。おそらくデフォルト値があります。

バンドルで、この構成に応じてオブジェクトを作成しようとします。これを try catch ブロックで囲んで、欠落している依存関係をキャッチしたり、特定のクラスが利用可能かどうかを確認したりできます。前述のように、特定のファイルの存在をテストするのではなく、php 関数を使用して特定のクラスの存在をテストしますclass_exists。テストは、実際に使用したい 1 つまたは複数のクラスに対して行う必要があります。

于 2012-11-26T22:49:21.660 に答える