7

私は Symfony Standard Edition を使用しており、サービスのような Symfony Finder コンポーネントを取得しようとしましたが、見つかりませんでした。Finder を使用するには、次のように手動で作成する必要があります。

$finder = new Symfony\Component\Finder\Finder();

サービスコンテナから取得できないのはなぜですか? それは間違っていましたか?

PS Symfony Filesystem コンポーネントはサービス コンテナーに存在し、名前で利用できますfilesystem

4

5 に答える 5

14

Symfony の Finder コンポーネントはスタンドアロンのコンポーネントであり、FileSystem コンポーネントの一部ではありません:

Finder インスタンスは機能するために操作する必要があるオブジェクトであるため、「ファインダー」サービスはありません。また、オブジェクトは常に参照によって渡されるため、誰かがサービスを一度変更すると、誰もがそれらの変更を確認できます。これは、このコンポーネントに必要なものではありません。

ただし、独自のサービスを Finder インスタンスとして作成し、このサービスを別のサービスでのみ (依存関係として) 使用することができます。

于 2014-09-24T13:12:58.267 に答える
0

Yann Eugoné が言ったようFinderに、独自のパッケージがあります: symfony/finder. そして、それは通常、直接インスタンス化されますnew Finder()。ただし、サービスとして使用することはできます。サービス構成で指定します。たとえば、config/services.yml次のようになります。

Symfony\Component\Finder\Finder:
    shared: false

shared: falseと重要Finderです。これは、コンテナがクラス間で同じオブジェクトを再利用することを防ぎFinderます。そうしないと、クロスコンタミネーションが発生します。つまり、あるクラスのインスタンスに加えられた変更が、それが使用されている他のすべての場所で有効になります。https://symfony.com/doc/current/service_container/shared.htmlを参照してください。

于 2021-08-10T21:09:45.703 に答える