Phabricator 是一个编码非常完善的 PHP 应用程序,但在文档方面有所欠缺。话又说回来,什么开源项目不是?在过去的几个月里,我一直在慢慢地将一种新的审查工具 Phabricator 与一种更老的工具 Bugzilla 集成在一起。在最近的步骤中,我需要向修订添加自定义字段(DifferentialCommitMessageCustomField 类扩展):
创建 DifferentialCommitMessageCustomField 扩展非常简单,但由于 DifferentialRevision 和其他 Phabricator 类的结构,检索该字段值并不像人们希望的那么容易.在尝试了多种方法并梳理了类链源代码之后,Aviv Eyal 提供了一个很好的实用函数来检索给定 Phabricator 对象类型的自定义字段数据:
function get_custom_field_value($object, $key_field) {
$field = PhabricatorCustomField::getObjectField(
$object,
PhabricatorCustomField::ROLE_DEFAULT,
$key_field
);
id(new PhabricatorCustomFieldStorageQuery())
->addField($field)
->execute();
$value = $field->getValueForStorage();
return $value;
}
在我的例子中,$object 是一个 DifferentialRevision 而 $key_field 是 differential:bugzilla-bug-id,在我的 DifferentialCommitMessageCustomField 扩展中定义。如果您要将任何类型的 CustomField 添加到任何 Phabrication 应用程序,您可以使用相同的方法。
当缺少文档且继承级别深达十几级时,社区成员可以互相帮助是件好事——这对项目来说意义重大。
