Почему я не могу получить Symfony Finder как сервис?

Я использую Symfony Standard Edition и пытаюсь получить компонент Symfony Finder как сервис, но не нашел его. Чтобы использовать Finder, мне нужно создать его вручную, например:

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

Почему я не могу получить его из сервисного контейнера? Это было неправильно?

Постскриптум Компонент Symfony Filesystem существует в служебном контейнере и доступен по имени filesystem,

4

Решение

Компонент Symfony Finder является автономным компонентом, он не является частью компонента FileSystem:

Службы поиска нет, потому что экземпляр Finder — это объект, которым нужно манипулировать, чтобы он работал. И поскольку объекты всегда передаются по ссылке, если кто-то один раз модифицирует сервис, все увидят эти изменения. Это не то, что вы хотите для этого компонента.

Но вы можете создать свой собственный сервис как экземпляр Finder и использовать этот сервис только в другом сервисе (как зависимость).

7

Другие решения

Чтобы дополнить ответ Янна Юджона кодом. Вот как вы можете создать свой собственный FinderService из ServiceComponent и внедрить в другие сервисы.

services.yml

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

std.your_service:
class: Std\AppBundle\Services\YourService
arguments: [@std.symfony_finder]
4

Вы уверены, что это компонент файловой системы?

http://symfony.com/doc/current/components/finder.html

use Symfony\Component\Finder\Finder;

$finder = new Finder();
$finder->files()->in(__DIR__);

foreach ($finder as $file) {
// Print the absolute path
print $file->getRealpath()."\n";

// Print the relative path to the file, omitting the filename
print $file->getRelativePath()."\n";

// Print the relative path to the file
print $file->getRelativePathname()."\n";
}

Вот пример. Вы можете установить его поверх композитора и его

{
"require": {
"symfony/finder": "2.3.*"}
}

После этого вы можете работать с ним.

0
По вопросам рекламы [email protected]