本食谱条目介绍如何将广泛使用的 Doctrine ORM 从头开始集成到 Slim 4 应用程序中。
向应用程序中添加 Doctrine
第一步是使用 composer 将 Doctrine ORM 导入项目中。
composer require doctrine/orm:^3.0 doctrine/dbal:^4.0 symfony/cache
请注意,Doctrine 于 2021 年 4 月 30 日官方弃用了 doctrine/cache
,并在发布 v2.0.0 版本时删除了该库中的所有缓存实现。自此以后,他们建议改用 symfony/cache
,它是一个符合 PSR-6 的实现。只有在需要在生产中缓存 Doctrine 元数据时才需要使用它,但这样做没有任何缺点,所以我们将在本文中展示如何进行设置。
如果你尚未迁移到 PHP8,或者只是希望继续使用传统的 PHPDoc 注释来注释实体,则还需要导入 doctrine/annotations
软件包,它曾经是 doctrine/orm
的一个依赖项,但从 2.10.0 开始它是可选的
composer require doctrine/annotations
定义你的第一个实体
你可以跳过此步骤,直接使用实际的 Doctrine 实体。以下仅为示例。
请注意,它使用 PHP8 属性,如果需要,请将它们转换为 PHPDoc 注释。
提供数据库凭据
接下来,在 Slim 配置旁边添加 Doctrine 设置。
定义 EntityManager 服务
现在我们定义了 EntityManager
服务,这是代码中与 ORM 交互的主要点。
Slim 4 要求您提供自己的 PSR-11 容器实现。本示例使用 uma/dic
,这是一个简单、简洁的 PSR-11 容器。根据您自己的选择调整容器。
传统上,注释元数据读取器是最流行的,但从 doctrine/orm
2.10.0 开始,它们使对 doctrine/annotations
的依赖变为可选,暗示该项目希望用户迁移到现代 PHP8 属性符号。
这里我们展示了如何使用 PHP8 属性配置元数据读取器。如果您尚未迁移到 PHP8 或想使用传统的 PHPDoc 注释,则需要使用 Composer 明确要求 doctrine/annotations
,并且调用 Setup::createAnnotationMetadataConfiguration(...)
而不是 Setup::createAttributeMetadataConfiguration(...)
,如下例所示。
创建 Doctrine 控制台
要运行数据库迁移,验证类注释等,您将创建 doctrine
CLI 应用程序。此文件只需检索我们刚刚在容器中定义的 EntityManager 服务,并将其传递给 ConsoleRunner::run(new SingleManagerProvider($em))
。
通常创建此文件而无需 .php 扩展名,并使其可执行。它可以放置在项目的根目录或 bin/
子目录中。该文件以 #!/usr/bin/env php
开头,可以使用 chmod +x doctrine
命令在 Linux 上使其可执行。
花点时间验证控制台应用程序是否正常工作。配置正确后,其输出将或多或少如下所示
此时,您可以通过运行 php vendor/bin/doctrine orm:schema-tool:create
来初始化数据库并加载架构。
在自己的代码中使用 EntityManager
恭喜!您现在可以从命令行管理数据库,并在需要在代码中使用 EntityManager
。
其他资源