如何在Symfony 4.x中为“可重用捆绑包”配置“实体”?

时间:2019-04-02 09:57:40

标签: php symfony symfony4

我使用的是symfony 4.x,我为easyadmin附加组件创建了可重用的包。我创建了一个众所周知的实体,但是在提交数据时,我有一个针对HasLifecycleCallbacks的方法_prePersist未被检测到。

cmd.Parameters.AddWithValue("@userType", userType);
/**
 * @ORM\HasLifecycleCallbacks()
 * @ORM\Table
 * @ORM\Entity
 */
class Post
{}

1 个答案:

答案 0 :(得分:0)

您将需要更新Bundle的配置,以注册用于保存实体的文件夹以及生命周期事件。将它们放在src/Entity中时没有必要,因为DoctrineBundle已经为此提供了默认配置。这就是为什么在您的config/packages/doctrine.yaml中拥有以下内容的原因:

doctrine:
    orm:
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

您应该跟踪DoctrineBundle如何从Configuration.php读取和处理此配置,然后通过查看DoctrineExtension.php从这些配置值配置服务容器的方式。您可能可以省略配置文件,但是您的MyBundleExtension需要从捆绑包中使用实体类更新Doctrine服务。

或者,您可以查看食谱,而不是将Entity保留在包中,只要安装了包,就将其复制到src /目录中。由于食谱的工作原理,您的软件包必须为此开源,并且您必须提供contrib-recipe for this bundle

edit:另一个选择是为基本设置提供完整的框架,这样您就不必担心捆绑包和独立配置,而只需为基本的入门应用程序提供您认为有用的默认设置即可。 / p>