I am trying the new automatic service loading using Symfony's Dependency Injection component (stand-alone, not within a Symfony app), version v3.3.13.
If I manually define a service, the class is loaded correctly:
# services.yml
myasset:
class: Mysite\Asset\Asset
# in a PHP file
$container->get('myasset'); # works
If I set up automatic loading, it fails with the error message: ReflectionException: Class does not exist in /var/www/vendor/symfony/dependency-injection/ContainerBuilder.php on line 1070
# services.yml
_defaults:
autowire: true
autoconfigure: true
public: false
Bloggi\:
resource: '../src/*'
public: true
# in a PHP file
$container->get(Mysite\Asset\Asset::class);
The reason it fails is because the classes are found and service definitions created, but the class attribute on the definition is null for the automatically loaded services.
My DIC configuration looked like:
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__));
$loader->load(__DIR__ . '/../config/services.yml');
The missing line was $container->compile();
The working definition
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(__DIR__));
$loader->load(__DIR__ . '/../config/services.yml');
$container->compile();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With