常量变量应该放在Symfony2包中

Dah*_*hab 6 php constants symfony

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

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

fer*_*tor 14

我就像使用Entity Constats简单的关系一样.比方说,例如,您调用的实体属性status只能包含0-2之间的值.status在这种情况下,额外的实体可能过度,所以我只需将它们定义为constants:

class Entity {

    const STATUS_PUBLIC = 0;
    const STATUS_WAITING = 1;
    const STATUS_REJECTED = 2;

}
Run Code Online (Sandbox Code Playgroud)

它允许您status通过比较常量来简单地检查:

$entity->getStatus() == Entity::STATUS_PUBLIC
Run Code Online (Sandbox Code Playgroud)

甚至在树枝上:

entity.status == constant('STATUS_PUBLIC', entity)
Run Code Online (Sandbox Code Playgroud)

或者在QueryBuilder:

$builder->andWhere('status = :status')
    ->setParameter('status', Entity::STATUS_PUBLIC)
Run Code Online (Sandbox Code Playgroud)

事实证明它对我来说非常有效.

正如其他答案指出的那样,绝对应该避免全局常数.使用参数.


由于似乎不清楚何时使用Parameters:

摘自官方最佳实践:

不需要为您永远不会配置的值创建配置选项.

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


Tom*_*ski 1

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

应该避免的一件事是将常量放入配置文件中,除非它会经常更改,如Symfony 最佳实践中所述