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 应用程序,您可以使用相同的方法。
当缺少文档且继承级别深达十几级时,社区成员可以互相帮助是件好事——这对项目来说意义重大。