避免在Symfony中硬编码值

lmyy7pcs  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(127)

我有一个Product实体和一个Brand实体。
一个产品可以有多个品牌;所以让我们拿一个有B1和B2品牌的产品P为例。其中一个品牌B1是“主要”品牌。
我想知道一个产品在Product实体中是否有某个品牌(比如getter / isser),特别是该产品是否属于主品牌。
我有一个env()助手来根据环境设置每个品牌的ID,所以我可以做:

public function isB1Product(): bool
{
    foreach ($this->brands as $brand) {
        if ($brand->getId() === (int)env('B1_ID') {
            return true;
        }
    }

    return false;
}

你知道有没有其他方法可以做到这一点?我不想对价值观进行硬编码(品牌名称随时可能更改)。
谢谢!

xytpbqjk

xytpbqjk1#

您可以为产品类型定义接口。这样,它仍然会反映业务逻辑,而不是直接硬编码值,并且它可以在代码中的任何地方使用。

interface ProductTypeA{
    public const NAME = 'A';
}

interface ProductTypeB{
    public const NAME = 'B';
}
6gpjuf90

6gpjuf902#

感谢您的回复。
我不能使用接口,因为数据存储在数据库中,所以我不知道哪些数据可以存储。
我意识到我的isB1Product()方法名并不能反映我真正想要的东西;而不是isMainProduct()知道B1是主要品牌。
不管怎样,我找到了一个解决方案,编写一个env()助手函数--就像Laravel一样。
感谢大家!

相关问题