从框架标准语法中提取字符串是好习惯吗?

Is it good practise to extract strings from framework standard syntax?

例如:在 sonata admin 中,单个 admin class 总是重复出现语法,如

$formMapper->add('test', null, ['label' => 'testlabel']);

$formMapper->add('test1', null, ['label' => 'testlabel1']);

$formMapper->add('test2', null, ['label' => 'testlabel2']);

在这种情况下,如果我使用 add 方法添加多个字段,我们的质量门告诉我,这是使用 'label' 字符串超过 2 次的代码味道。我应该为该字符串添加一个常量...

现在拥有许多 class 充满常量的

是好事还是坏事
const KEY_LABEL = 'label'

$formMapper->add('test2', null, [self::KEY_LABEL => 'testlabel2']);

???

我想不通,有什么好处..如果有一天标签键会改变,这是框架给定的,我必须以任何方式改变这些东西...

简短回答:不。Symfony 不会重命名键。

长答案:Symfony 有一个非常严格的 Backwards Compatibility Promiselabel 键不太可能被重命名。但这并不意味着它不会改变。

如果您必须 'rename' 键,很可能您也必须更改值。这意味着您不是在重命名,而是在替换它。使用常量会帮助您重命名键,但不会帮助您重构值。

我很多年前就开始使用 Symfony(从 2.1 开始,现在正在测试 3.4-beta),过去我不得不执行一些 'renaming'。在几乎所有情况下,密钥都没有被重命名,但它已被弃用,后来被另一个密钥取代。我记得的例子之一是 Choice form type refactorization,但我相信还有更多更好的例子。