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

时间:2017-11-10 10:00:04

标签: php symfony sonata-admin code-standards

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

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

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

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

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

现在好的或者不好的做法是让许多类充满像

这样的常量
const KEY_LABEL = 'label'

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

???

我无法弄清楚,最大的好处是什么?如果有一天标签密钥会改变,这是由框架给出的,我必须对这个东西做任何改变...

1 个答案:

答案 0 :(得分:0)

简短回答:不会.Symfony不会重命名密钥。

答案很长:Symfony有一个非常严格的Backwards Compatibility Promise。 {/ 1}}密钥不太可能被重命名。但这并不意味着它不会改变。

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

多年前我开始与Symfony合作(从2.1开始并立即测试3.4-beta)我过去不得不进行一些'重命名'。在几乎所有情况下,密钥都没有重命名,但它已被弃用,后来被另一个密钥替换。我记得的一个例子是Choice form type refactorization,但我确信还有更多甚至更好的例子。