我想知道,我应该在哪里放置常数,例如用于映射状态,在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 %}
提前致谢!
微米。
答案 0 :(得分:7)
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常量属于实体,因此它们可以在多个上下文中重用(例如,多个控制器),而无需重新定义每个控制器中的常量。