Symfony最佳实践:在哪里放置这些常量?

时间:2015-01-06 00:22:07

标签: symfony oop model-view-controller doctrine-orm twig

我想知道,我应该在哪里放置常数,例如用于映射状态,在Symfony中。我曾经在控制器中设置它们,但它感觉不对,我更喜欢实体,但不是真的。

什么是对的?

它不是"你怎么想?" -Question,我真的想知道最佳实践并欣赏解释或链接来源(s )。两者都有效,现在。

控制器

namespace my\bundle\Controller;

class MyController {
    const STATUS_NEW     = 1;
    const STATUs_PENDING = 2;
    // ...
}

实体

namespace my\bundle\Entity;

class MyEntity {
    const STATUS_NEW     = 1;
    const STATUs_PENDING = 2;
    // ...
}

树枝中的例子:

{% set statusNew = constant('my\\bundle\\Controller\\MyController::STATUS_NEW')%} {# or \\Entity\\ #}
{% if data.status == statusNew %}
    Hi, I'm new.
{% endif %}

提前致谢!

微米。

3 个答案:

答案 0 :(得分:7)

恕我直言,实体本身就是一个好地方。对于twig方法,在我之前的项目中,我在实体上创建了一些帮助方法,用于检查状态,如:

namespace my\bundle\Entity;

class MyEntity {
    const STATUS_NEW     = 1;
    const STATUs_PENDING = 2;
    // ...

   // For each const status
   public function isNew(){
     return $this->status == self::STATUS_NEW;
   }
}

并在树枝中使用:

{% if data.isNew %}{# more contract form: if data.new  #}
    Hi, I'm new.
{% endif %}

并且您不会在实体外部公开状态字段(包含新逻辑)。

希望得到这个帮助。

答案 1 :(得分:3)

答案取决于它,但现在有Symfony的最佳实践;特别是那里is a section on constants vs. configuration options可以说明你所要求的内容。

  

使用常量来定义很少更改的配置选项。

在类中定义常量的好处是你可以在Twig中轻松访问它们。例如,如果您有一个Post类,例如最佳做法中的示例,并将其作为post的实例传递给您的模板,则可以通过以下方式访问常量:

{{ constant('NUM_ITEMS', post) }}

现在,您肯定有时可能需要指定可配置选项 - 例如,如果您要创建可重用的捆绑包并希望允许覆盖这些值。所以它取决于它,但对于你的情况,Symfony建议将它们放在你的实体中。

答案 2 :(得分:2)

STATUS常量属于实体,因此它们可以在多个上下文中重用(例如,多个控制器),而无需重新定义每个控制器中的常量。