我面临着一个相当具体的问题。我们继承了一个已经存在很长时间的应用程序,没有任何测试套件,并且很难维护。为了改进这一点,我们创建了一个构建器,它应该帮助我们创建一个数据实体,并且该实体可以是 A、B 或 C 类型。我想创建一个新实体并为其分配一个新的 TypeA,其中包含类型的 ID,但不必直接从数据库加载它,因为这意味着将存储库传递到控制器方法中,然后传递到方法 A 中,方法 A 调用方法 2 和方法 3...这在应用程序中随处可见。从工作负载的角度来看,这是不可行的。
我需要这样的东西:
<?php
class TypeA extends Type {
private ?int $id = 1;
}
class Data {
private Type $type;
public function setType() {
#code
}
}
$data = DataBuilder::build();
$data->setType(new TypeA());
$em->persist($data);
$em->flush();
提前致谢!
或者,如果有人有一个解决方案,我不需要将任何参数传递到我的构建器中,我也会非常感兴趣!
如果您使用的是 PHP >= 8.1(您应该使用 PHP,因为 8.0 及以下版本已经 EOL),您可以使用枚举,如下所示:
enum Type: int {
case A = 1;
case B = 2;
case C = 3;
}
#[ORM\Entity]
class Data {
#[ORM\Column(enumType: Type::class)]
private Type $type;
public function setType() {
#code
}
}
$data = DataBuilder::build();
$data->setType(Type::A);
$em->persist($data);
$em->flush();