Я использую Symfony Standard Edition и пытаюсь получить компонент Symfony Finder как сервис, но не нашел его. Чтобы использовать Finder, мне нужно создать его вручную, например:
$finder = new Symfony\Component\Finder\Finder();
Почему я не могу получить его из сервисного контейнера? Это было неправильно?
Постскриптум Компонент Symfony Filesystem существует в служебном контейнере и доступен по имени filesystem
,
Компонент Symfony Finder является автономным компонентом, он не является частью компонента FileSystem:
Службы поиска нет, потому что экземпляр Finder — это объект, которым нужно манипулировать, чтобы он работал. И поскольку объекты всегда передаются по ссылке, если кто-то один раз модифицирует сервис, все увидят эти изменения. Это не то, что вы хотите для этого компонента.
Но вы можете создать свой собственный сервис как экземпляр Finder и использовать этот сервис только в другом сервисе (как зависимость).
Чтобы дополнить ответ Янна Юджона кодом. Вот как вы можете создать свой собственный 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]
Вы уверены, что это компонент файловой системы?
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.*"}
}
После этого вы можете работать с ним.