gpt4 book ai didi

symfony - 如何在编译 Symfony 容器之前获取 Doctrine 实体元数据?

转载 作者:行者123 更新时间:2023-12-04 08:47:29 25 4
gpt4 key购买 nike

在一个 Symfony 包中,我定义了一个编译器传递来预处理一些配置。该配置的一部分基于 Doctrine 实体,因此我需要获取所有应用程序实体的完整元数据信息。

编译器传递执行得很晚( PassConfig::TYPE_BEFORE_REMOVING )。我正在使用 $container->get('doctrine')像这样获取实体元数据:

$em = $container->get('doctrine')->getManagerForClass($entityClass);
$entityMetadata = $em->getMetadataFactory()->getMetadataFor($entityClass);

但是,由于使用了 doctrine,这会导致一些用户随机失败。 Symfony 容器编译期间的服务。

最佳答案

我建议更改您的实体地址。主要是 - 使用接口(interface)创建模型并让实体实现它们。

使用 resolve_target_entities Doctrine 会将它们“转换”为特定的类。

示例代码在这里:https://github.com/Sylius/SyliusResourceBundle/blob/master/DependencyInjection/Compiler/DoctrineTargetEntitiesResolverPass.php

只需确保您的捆绑包在 DoctrineBundle 之前注册即可已被注册。

然后 - 在您的整个应用程序中 - 而不是 AppBundle::Entity寻址,使用之前绑定(bind)到实体的接口(interface)的 FQDN。

我对编译器和服务进行了一些实验,它是 非常糟糕的主意在编译容器过程下基于跨捆绑服务...为什么?它不可靠 - 有时它会按你的意愿工作,有时它会像你描述的那样失败。

关于symfony - 如何在编译 Symfony 容器之前获取 Doctrine 实体元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com