plusforta / value-objects-bundle
1.0.1
2024-04-29 14:45 UTC
Requires
- php: ^8.0
- doctrine/orm: ^2.7
- symfony/validator: >=5.1
- webmozart/assert: ^1.9
This package is auto-updated.
Last update: 2024-08-29 13:32:13 UTC
README
该库提供了各种值的对象。对于每个值对象,还有一个 Doctrine 类型,可以集成到 Symfony 项目中,使得值对象可以直接存储在数据库中。
已弃用
它之所以存在,仅仅是因为有人在到处使用它。
如果你想在项目中使用枚举,只需创建一个枚举即可。
在这里定义它没有任何意义。你几乎永远不会在另一个项目中使用它。
定义自定义数据库类型是没有意义的。这只是一个糟糕的想法,在我意识到发生了什么之前已经走得太远。我深感抱歉。
它过于复杂,使得代码更难阅读和理解。
如果你扩大了这个范围,我会非常失望。
验证
我不明白为什么有人会认为在这里对数据进行验证是个好主意,在这里数据永远无法被用户纠正。
如果你想验证数据,请在表单或控制器中验证,这样用户可以采取一些纠正措施。这里太晚了。
请随意删除任何让你烦恼的验证。更好的是,停止使用这些对象。
当前使用情况
项目 | 使用的版本 |
---|---|
reports | dev-master |
export-service | dev-master |
api-kfde | dev-master |
pdf-service | dev-master |
email-service | dev-master |
在撰写本文时,dev-master 与版本 1.0.0 相同
安装
composer require plusforta/value-objects-bundle:dev-master
使用
库中的所有值对象都实现了 \Plusforta\ValueObjects\StringValueInterface
。每个对象实现了一个 fromString(string $value)
方法来创建值对象,以及一个 toString()
方法将值对象转换回字符串。
定义 doctrine 类型
要使用值对象作为实体的属性类型,必须将值对象定义为 doctrine 类型。
# config/packages/doctrine.yaml
doctrine:
dbal:
types:
doctrine_type_email: Plusforta\Doctrine\Type\Common\Email\Email
现在值对象可以用作实体的属性类型。在 config/packages/doctrine.yaml 中定义的键必须用作数据库类型。
/**
* @ORM\Column(type="doctrine_type_email", length=255, nullable=true)
*/
private ?Plusforta\ValueObejcts\Common\Email\Email $email = null;