为什么我不能让Symfony Finder像服务一样?

Vic*_*sky 6 php symfony symfony-components symfony-filesystem symfony-finder

我使用Symfony标准版并试图让Symfony Finder组件像服务一样,但没有找到它.要使用Finder,我需要手动创建它,如:

$finder = new Symfony\Component\Finder\Finder();
Run Code Online (Sandbox Code Playgroud)

为什么我无法从服务容器中获取它?这是错的吗?

PS Symfony Filesystem组件存在于服务容器中,并按名称提供filesystem.

Yan*_*oné 8

Symfony的Finder组件是一个独立的组件,它不是FileSystem组件的一部分:

没有"finder"服务,因为Finder实例是需要被操作才能工作的对象.由于对象总是通过引用传递,如果有人修改了一次服务,每个人都会看到这些更改.这不是您想要的此组件.

但是您可以将自己的服务创建为Finder实例,并仅在另一个服务中使用此服务(作为依赖项).


HKa*_*lla 5

用一些代码补充Yann Eugone的答案。这是您可以从ServiceComponent创建自己的FinderService并注入其他服务的方式。

services.yml

    std.symfony_finder:
        class: Symfony\Component\Finder\Finder
        public: false

    std.your_service:
        class: Std\AppBundle\Services\YourService
        arguments: [@std.symfony_finder]
Run Code Online (Sandbox Code Playgroud)