Uncaught Ошибка: класс 'Symfony\Component\Config\Resource\ClassExistenceResource' не найден

Я добавил контейнер для инъекций Symfony Dependency (composer require symfony/dependency-injection): https://symfony.com/doc/current/components/dependency_injection.html

Запустите: composer dump-autoload -o реорганизовать занятия (/www/vendor/composer/autoload_classmap.php файл пуст после установки новых библиотек через composer).

это работает в моем init.php файл:

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use MyApp\Core\App; 
use MyApp\Core\Database; 
use MyApp\Models\SystemUser; 
use MyApp\Models\Customer; 
use MyApp\Core\Log;
$container = new ContainerBuilder();

    $container->autowire( Log::class );
    $container->autowire( Database::class );
    $container->autowire( SystemUser::class );
    $container->autowire( Customer::class );
    $container->autowire( App::class )
        ->setPublic( true );

    $container->compile();

    $app = $container->get( App::class );

и ломается на compile(),

Что мне не хватает?

Не удается найти какой-либо источник для решения этой проблемы.

Что я делаю неправильно?

PHP Fatal error:  Uncaught Error: Class 'Symfony\Component\Config\Resource\ClassExistenceResource' not found in /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php:385
Stack trace:
#0 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(225): Symfony\Component\DependencyInjection\Compiler\AutowirePass->createTypeNotFoundMessage(Object(Symfony\Component\DependencyInjection\TypedReference), 'argument "$db" ...')
#1 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(256): Symfony\Component\DependencyInjection\Compiler\AutowirePass->Symfony\Component\DependencyInjection\Compiler\{closure}()
#2 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(165): Symfony\Component\DependencyInjection\Compiler\AutowirePass->autowireMethod(Object(ReflectionMethod), Array)
#3 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(123): Symfony\Component\DependencyInjection\Compiler\AutowirePass->autowireCalls(Object(ReflectionClass), true)
#4 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(71): Symfony\Component\DependencyInjection\Compiler\AutowirePass->doProcessValue(Object(Symfony\Component\DependencyInjection\Definition), true)
#5 /www/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php(82): Symfony\Component\DependencyInjection\Compiler\AutowirePass->processValue(Object(Symfony\Component\DependencyInjection\Definition), true)
#6 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(100): Symfony\Component\DependencyInjection\Compiler\AbstractRecursivePass->processValue(Array, true)
#7 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(71): Symfony\Component\DependencyInjection\Compiler\AutowirePass->doProcessValue(Array, true)
#8 /www/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php(46): Symfony\Component\DependencyInjection\Compiler\AutowirePass->processValue(Array, true)
#9 /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php(52): Symfony\Component\DependencyInjection\Compiler\AbstractRecursivePass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#10 /www/vendor/symfony/dependency-injection/Compiler/Compiler.php(95): Symfony\Component\DependencyInjection\Compiler\AutowirePass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#11 /www/vendor/symfony/dependency-injection/ContainerBuilder.php(750): Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#12 /www/myapp/init.php(50): Symfony\Component\DependencyInjection\ContainerBuilder->compile()
#13 /www/public/index.php(10): require_once('/www/myapp/...')
#14 {main}
  thrown in /www/vendor/symfony/dependency-injection/Compiler/AutowirePass.php on line 385

composer.json

{
    "name": "potato/www",

    "authors": [
        {
            "name": "potato potato",
            "email": "potato@MyApp.com"
        }
    ],

    "require": {
        "monolog/monolog": "^1.24",
        "filp/whoops": "^2.3",
        "symfony/dependency-injection": "^4.2"
    }, 

    "autoload":{
        "psr-4": {
            "MyApp\\": "myapp"
        }
    },
    "require-dev": {
        "squizlabs/php_codesniffer": "^3.3"
    }
}

1 ответ

Решение

Причина кажется довольно простой: вы потребовали symfony/dependency-injection но Symfony\Component\Config\Resource\ClassExistenceResource очевидно принадлежит symfony/config, Если вы будете пересматривать зависимости symfony/dependency-injection вы увидите, что это требует symfony/config только как dev зависимость. Отсюда простое включение symfony/config должен решить проблему.

Причиной этой ошибки является другой вопрос, и, вероятно, о нем следует сообщить разработчикам Symfony.

Другие вопросы по тегам