我正在开发一个Symfony 3应用程序。Symfony profiler日志告诉我:
依赖于服务自动注册类型"AppEntitySubDirCategory"已自3.4版本起被弃用,并且在4.0版本中将不再支持。 请创建一个名为"AppEntitySubDirCategory"的服务。
然而,这只是一个简单的ORM bean:
/** * @ORMEntity * @ORMTable(name="category") */ class Category { ...
我应该如何解决这个问题?我真的需要在services.yaml
中将ORM实体声明为服务吗?如果是的,应该如何做?
更新 事实上,我的实体在一个子目录中。我已经修改了我的问题。
在我的service.yaml
中,我尝试了:
App: resource: '../src/*' exclude: '../src/{Entity,Repository,Tests,Entity/SubDir}'
...但是没有效果。
您是否在Service-auto registration下有使用实体作为构造函数参数的类?
这就是您的问题所在。
您需要问自己,这个相关的类是否真的是一个服务,还是一个您总是自己创建实例的普通对象。
如果它不是通过容器作为服务使用的,您有两个选择:
您可以通过类似下面的全局模式来排除这个类:
或者您可以在您的配置中设置以下参数:
使用此选项,容器不会尝试创建一个带有不可用作服务的参数的服务类,并且您将获得一个决定性的错误。这是sf4的默认设置。
一个触发此错误的好例子是一个自定义事件类,在构造函数中以实体作为负载:
现在,如果没有专门排除此文件,容器将尝试自动将其注册为服务。由于实体被排除,它无法自动装配。但在3.4中,有这个回退机制触发了此警告。 一旦激活了strict_mode,该事件将无法作为服务使用,如果您尝试将其用作服务,将会引发错误。