hostnet / entity-plugin-lib
Hostnet Doctrine 实体库的安装器
Requires
- php: ^8.1
- composer-plugin-api: ^2.0.0
- doctrine/annotations: ^1.13.2
- phpdocumentor/type-resolver: ^1.4.0
- symfony/filesystem: ^5.4||^6.0
- twig/twig: ^3.0
Requires (Dev)
- composer/composer: ^2.0.0
- hostnet/phpcs-tool: ^9.1.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5.6
- dev-master
- 4.0.1
- 4.0.0
- 3.0.11
- 3.0.10
- 3.0.9
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.1-beta
- 2.1.0
- 2.1.0-beta
- 2.0.1
- 2.0.1-beta
- 2.0.1-alpha
- 2.0.0
- 1.8.0
- 1.7.0
- 1.6.0
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- dev-feature/new-twig-version
This package is auto-updated.
Last update: 2024-09-06 08:06:35 UTC
README
问题
Hostnet 实体作曲插件是为了解决使用 Doctrine ORM 纯粹方式遇到的一些问题而开发的。虽然我们的解决方案灵感来源于与 doctrine 的合作,但它可以完美地用于其他任何持久化实体的方式。我们遇到的问题是:
- 实体变得非常大;
- 实体在应用程序之间共享,而这些应用程序继承了它们不允许使用的功能;
- 如计算折扣等知识领域通过模型分散,而不是分组在一起;
- 滥用继承来防止代码重复。
为了解决我们的问题,我们从软件开发的另一个领域借鉴了一些想法,因为我们感觉我们正在触及面向对象编程的边界,并寻求更多的模块化。我们使用了面向方面编程背后的想法来解决我们的问题。
基本概念:实体按职责分组到包中。此插件将包链接在一起。
如果你:
- 维护一个包含实体且希望人们可以在此基础上进行扩展的开源项目。
- 你有一个数据库,以及多个应用程序访问该数据库的不同(但相关)的子集。
- 或者正在寻找自己连接某些东西。
如果你不属于上述任何一组,请小心,因为这可能不是你想要的。
示例
一个应用程序需要了解Clients
,但不知道Contract
的概念。另一个应用程序需要访问这两个实体。所以在一个应用程序中,你希望能够调用$client->getContracts()
。但在另一个中,你更喜欢根本不知道合同的存在!
使用此插件,你可以创建一个专注于Client
的包,另一个专注于Contract
的包,并为此注入额外的功能(如getContracts
)到Client
中。
用法
创建可扩展的包
- 创建一个 composer 包来存放你的实体。
- 使用 PSR-0 或 PSR-4 自动加载 src/ 目录。
- 包的类型应为
hostnet-entity
。 - 包应要求 "hostnet/entity-plugin-lib": "2.*"。
- 在以 Entity 结尾的命名空间内创建一个实体,例如
Page
。 - 运行
php composer.phar dump-autoload
。 (实体插件会钩住此事件。)这应该会输出一些内容
Pass 1/3: Generating compound traits and interfaces
Pass 2/3: Preparing individual generation
Pass 3/3: Performing individual generation
- 从你的实体中,使用在
Generated/
命名空间中生成的 trait。
use \Hostnet\Page\Entity\Generated\PageTraits;
恭喜,你现在有一个可扩展的实体包。
扩展包
按照上述步骤操作,并
- 确保你的新包依赖于旧包。
- 不要创建
Page
类,而是创建一个PageTrait
。 - 运行
php composer.phar update
。 - 检查
vendor/your-vendor-name/your-package-name/src/Entity/Generated/PageTraits.php
。它应该包含对您的包的引用。
提示
如果您使用 -v
或 -vv
或 -vvv
运行 composer.phar,它将显示更多信息。
如果您想从主应用程序扩展实体,您可以在 composer.json 的 extra 部分中使用 entity-bundle-dir
设置。
如果您不想生成接口,可以在composer.json的额外设置中将generate-interfaces
设置项设置为false
。我们将在未来的版本中将此设置为默认行为。
为了快速了解,请查看速查表。