常量变量应该放在Symfony2包中

时间:2015-04-20 08:29:04

标签: php symfony constants

也许有些人会认为这个问题很愚蠢,但事实并非如此。 我在问Symfony2 Bundle应该在哪里生活, 我在其他框架中使用在模型中创建我的常量变量,但是因为在Symfony2中我使用的是实体,所以我有点困惑。

它应该住在里面=>实体,控制器,服务甚至配置文件。

3 个答案:

答案 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

取自official best practice

  

为您永远不会配置的值创建配置选项不是必需的。

如果这些值发生变化,您可以考虑使用参数。一个例子是您的应用程序在多个环境中运行。使用参数将使您能够在不更新代码库的情况下适应环境变化。

答案 1 :(得分:4)

如果你检查一个像“FOSUserBundle”这样的symfony包,你会发现一些很好的用法和例子。

constant definitions

final class FOSUserEvents{
  const CHANGE_PASSWORD_INITIALIZE = 'fos_user.change_password.edit.initialize';

答案 2 :(得分:1)

我认为存储常量变量有一个好地方。它取决于这个常量变量的含义:如果这与实体有关,它应该是一个实体的常数;如果这是特定于服务,它应该是服务的常量。

应该避免的一件事是将常量放在配置文件中,除非它按照Symfony best practices

中的描述经常更改