也许有些人会认为这个问题很愚蠢,但事实并非如此。 我在问Symfony2 Bundle应该在哪里生活, 我在其他框架中使用在模型中创建我的常量变量,但是因为在Symfony2中我使用的是实体,所以我有点困惑。
它应该住在里面=>实体,控制器,服务甚至配置文件。
答案 0 :(得分:14)
我就像使用Entity Constats
来处理简单的关系一样。比方说,您有一个名为status
的实体属性,其值只能在0-2之间。在此方案中,额外的status
实体可能过度,因此我只需将其定义为constants
:
class Entity {
const STATUS_PUBLIC = 0;
const STATUS_WAITING = 1;
const STATUS_REJECTED = 2;
}
它允许您通过比较常量来简单地检查status
:
$entity->getStatus() == Entity::STATUS_PUBLIC
甚至在树枝上:
entity.status == constant('STATUS_PUBLIC', entity)
或QueryBuilder
:
$builder->andWhere('status = :status')
->setParameter('status', Entity::STATUS_PUBLIC)
事实证明,这对我来说非常有效。
正如其他答案指出的那样,绝对应该避免全局常量。使用参数。
因为似乎不清楚何时使用Parameters
:
为您永远不会配置的值创建配置选项不是必需的。
如果这些值发生变化,您可以考虑使用参数。一个例子是您的应用程序在多个环境中运行。使用参数将使您能够在不更新代码库的情况下适应环境变化。
答案 1 :(得分:4)
如果你检查一个像“FOSUserBundle”这样的symfony包,你会发现一些很好的用法和例子。
final class FOSUserEvents{
const CHANGE_PASSWORD_INITIALIZE = 'fos_user.change_password.edit.initialize';
答案 2 :(得分:1)
我认为存储常量变量有一个好地方。它取决于这个常量变量的含义:如果这与实体有关,它应该是一个实体的常数;如果这是特定于服务,它应该是服务的常量。
应该避免的一件事是将常量放在配置文件中,除非它按照Symfony best practices
中的描述经常更改