Php 依赖ORM实体上的服务自动注册错误

Php 依赖ORM实体上的服务自动注册错误,php,symfony,orm,deprecation-warning,Php,Symfony,Orm,Deprecation Warning,我正在开发一个Symfony 3应用程序。Symfony profiler日志告诉我: Relying on service auto-registration for type "App\Entity\SubDir\Category" is deprecated since version 3.4 and won't be supported in 4.0. Create a service named "App\Entity\SubDir\Category" instead. 然而,这是一

我正在开发一个Symfony 3应用程序。Symfony profiler日志告诉我:

Relying on service auto-registration for type "App\Entity\SubDir\Category"
is deprecated since version 3.4 and won't be supported in 4.0.
Create a service named "App\Entity\SubDir\Category" instead.
然而,这是一个简单的ORM bean:

/**
 * @ORM\Entity
 * @ORM\Table(name="category")
 */
class Category
{
...
我该如何解决这个问题?我真的需要在
services.yaml
中将ORM实体声明为服务吗?如果是,如何进行

更新 事实上,我的实体位于子目录中。我修正了我的问题

在我的
服务.yaml
中,我尝试了:

App\:
    resource: '../src/*'
    exclude: '../src/{Entity,Repository,Tests,Entity/SubDir}'

…但是没有用。

在服务自动注册中是否有使用实体作为构造函数参数的类

这就是你的问题所在

您需要问问自己,相关的类是一个服务还是一个普通的对象,您总是自己创建实例

如果未通过容器将其用作服务,则有2个选项:

您也可以通过glob模式排除此类,例如

AppBundle\:
    resource: '...'
    # you can exclude directories or files
    # but if a service is unused, it's removed anyway
    exclude: '../../{Entity,PathToYourNotService}'
也可以在配置中设置以下参数

parameters:
    container.autowiring.strict_mode: true
使用此选项,容器将不会尝试创建具有作为服务不可用的参数的服务类,您将得到一个决定性的错误。这是sf4的默认设置

触发此错误的类的一个很好的示例是一个自定义事件类,该类将实体作为构造函数中的有效负载:

namespace AppBundle\Event;

use AppBundle\Entity\Item;
use Symfony\Component\EventDispatcher\Event;

class ItemUpdateEvent extends Event
{
    const NAME = 'item.update';

    protected $item;

    public function __construct(Item $item)
    {
        $this->item = $item;
    }

    public function getItem()
    {
        return $this->item;
    }
}
现在,如果这个文件没有被排除在外,容器将尝试将它自动注册为服务。由于实体被排除在外,因此无法自动关联它。但在3.4中,有一个回退触发了这个警告。
一旦激活了strict_模式,事件将无法作为服务使用,如果您尝试将其作为服务使用,则会出现错误

您是否应该将实体的位置标记为services.yml中忽略的位置?还想知道名称空间的App与AppBundle。S3在默认情况下仍然使用AppBundle,除非您使用Flex安装。我可以试试,但我应该如何继续将它们标记为已忽略?+我正在从笔记本电脑上运行应用程序。很高兴知道。如果您对到底发生了什么感兴趣,也许我上一次编辑的一个小示例类会有所帮助。为了补充这个答案,这个错误是误报: