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

Mr.*_* B. 4 oop model-view-controller symfony doctrine-orm twig

我想知道,我应该在Symfony中放置常量,例如映射状态.我习惯在控制器中设置它们,但感觉不对,我更喜欢实体,但不是真的.

什么是对的?

这不是"你怎么想?" - 问题,我真的想知道最佳实践并欣赏解释或链接的来源.两者都有效,现在.

控制器

namespace my\bundle\Controller;

class MyController {
    const STATUS_NEW     = 1;
    const STATUs_PENDING = 2;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

实体

namespace my\bundle\Entity;

class MyEntity {
    const STATUS_NEW     = 1;
    const STATUs_PENDING = 2;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

树枝中的例子:

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

提前致谢!

M.

Mat*_*teo 8

恕我直言,实体本身就是一个好地方.对于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;
   }
}
Run Code Online (Sandbox Code Playgroud)

并在树枝中使用如:

{% if data.isNew %}{# more contract form: if data.new  #}
    Hi, I'm new.
{% endif %}
Run Code Online (Sandbox Code Playgroud)

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

希望这有帮助.

  • 这似乎是合适的解决方案,但是,如Qoop所说,你应该使用`self :: STATUS_NEW`代替.另外,`getIsNew`是一个糟糕的函数命名.你应该称它们为`isNew`和`isPending`.在twig中,你可以用`{%if data.new%}`直接调用它 (3认同)