php 类加载失败,php-Symfony自动服务加载失败,并显示“类不存在”

在不使用完整Symfony应用程序的情况下,尝试在v3.3.13版本的DependencyInjection组件中加载自动服务时遇到问题。当手动定义服务时,一切正常,但启用自动加载后,服务无法被正确加载,因为类的class属性为null。问题出在缺少了$container->compile()这一步,添加后服务能够成功加载。这是一个关于Symfony DIC配置和自动服务加载的常见陷阱。
摘要由CSDN通过智能技术生成

我正在尝试使用Symfony的Dependency Injection组件(独立的,不在Symfony应用程序中)v3.3.13版加载新的自动服务.

如果我手动定义服务,则该类将正确加载:

# services.yml

myasset:

class: Mysite\Asset\Asset

# in a PHP file

$container->get('myasset'); # works

如果设置自动加载,它将失败并显示错误消息:

ReflectionException:类在第1070行的/var/www/vendor/symfony/dependency-injection/ContainerBuilder.php中不存在

# services.yml

_defaults:

autowire: true

autoconfigure: true

public: false

Bloggi\:

resource: '../src/*'

public: true

# in a PHP file

$container->get(Mysite\Asset\Asset::class);

失败的原因是因为找到了类并创建了服务定义,但是对于自动加载的服务,定义上的class属性为null.

解决方法:

我的DIC配置如下所示:

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();

工作定义

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();

标签:symfony,dependency-injection,php

来源: https://codeday.me/bug/20191110/2014806.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值