Symfony 最佳实践:将这些常量放在哪里?
Symfony best practise: Where to place these constants?
我想知道我应该在哪里放置常量,例如用于映射状态,在 Symfony 中。我习惯于将它们设置在控制器中,但感觉不对,我更喜欢实体,但不是真的。
什么是对的?
这不是一个 "what do you think?" 问题,我真的很想知道 最佳实践 并感谢解释或链接源。目前两者都有效。
控制器或
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 %}
提前致谢!
男.
答案视情况而定,但现在有 Symfony 最佳实践;特别是那里 is a section on constants vs. configuration options 完全符合您的要求。
Use constants to define configuration options that rarely change.
在 classes 中定义常量的好处是您可以在 Twig 中轻松访问它们。例如,如果你有一个 Post
class 就像最佳实践中的例子,并将它的一个实例作为 post
传递给你的模板,你可以通过以下方式访问常量:
{{ constant('NUM_ITEMS', post) }}
现在,肯定有很多时候您可能想要指定可配置的选项 - 比如说,如果您正在创建一个可重用的包并希望允许覆盖这些值。所以这又取决于,但对于你的情况,Symfony 建议将它们放在你的实体中。
STATUS 常量属于实体,因此它们可以在多个上下文(例如多个控制器)中重复使用,而无需在每个控制器中重新定义常量。
恕我直言,实体本身是个好地方。对于树枝方法,在我之前的项目中,我在实体上创建了一些辅助方法来检查状态,例如:
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 %}
而且你不在实体外暴露状态字段(封装new的逻辑)。
希望对您有所帮助。
我想知道我应该在哪里放置常量,例如用于映射状态,在 Symfony 中。我习惯于将它们设置在控制器中,但感觉不对,我更喜欢实体,但不是真的。
什么是对的?
这不是一个 "what do you think?" 问题,我真的很想知道 最佳实践 并感谢解释或链接源。目前两者都有效。
控制器或
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 %}
提前致谢!
男.
答案视情况而定,但现在有 Symfony 最佳实践;特别是那里 is a section on constants vs. configuration options 完全符合您的要求。
Use constants to define configuration options that rarely change.
在 classes 中定义常量的好处是您可以在 Twig 中轻松访问它们。例如,如果你有一个 Post
class 就像最佳实践中的例子,并将它的一个实例作为 post
传递给你的模板,你可以通过以下方式访问常量:
{{ constant('NUM_ITEMS', post) }}
现在,肯定有很多时候您可能想要指定可配置的选项 - 比如说,如果您正在创建一个可重用的包并希望允许覆盖这些值。所以这又取决于,但对于你的情况,Symfony 建议将它们放在你的实体中。
STATUS 常量属于实体,因此它们可以在多个上下文(例如多个控制器)中重复使用,而无需在每个控制器中重新定义常量。
恕我直言,实体本身是个好地方。对于树枝方法,在我之前的项目中,我在实体上创建了一些辅助方法来检查状态,例如:
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 %}
而且你不在实体外暴露状态字段(封装new的逻辑)。
希望对您有所帮助。