Phabricator 是 Facebook 和其他受人尊敬的软件工程组织使用的优秀代码审查工具。用户界面漂亮,工作流程和工具简洁而全面,它是一个涵盖大多数用例的实用程序,包括 Web 和命令行。我已经编写了许多 Phabricator 扩展,并且我发现创建一个单一的配置扩展以供其他扩展使用是非常有用的。让我们看看创建您自己的自定义配置以在整个扩展中使用是多么容易!
创建配置扩展
首先创建一个扩展 PhabricatorApplicationConfigOptions
的新类:
final class PhabricatorBugzillaConfigOptions extends PhabricatorApplicationConfigOptions { // .... }
填写几个样板方法:
public function getName() { return pht('Bugzilla'); } public function getDescription() { return pht('Configure Bugzilla Settings.'); } public function getIcon() { return 'fa-cog'; } public function getGroup() { return 'apps'; }
getOptions
方法是定义各个设置的地方;让我们创建一些示例设置:
public function getOptions() { return array( $this->newOption( 'bugzilla.url', 'string', 'https://bugzilla.mozilla.org') ->setDescription(pht('Full URL for the Bugzilla server.')), $this->newOption( 'bugzilla.automation_user', 'string', 'phab-bot@bmo.tld') ->setDescription(pht('Automation Username on Bugzilla.')), $this->newOption( 'bugzilla.timeout', 'int', 15) ->setDescription(pht('Bugzilla timeout in seconds.')), $this->newOption( 'bugzilla.require_bugs', 'bool', false) ->setDescription(pht('Require existing Bugzilla bug numbers for revisions.')), ); }
这些设置以这种方式转换为 UI:
配置值类型很重要,因为 Phabricator 会读取它并呈现与该类型相关的字段;例如,bool
类型提供 True/False 下拉列表。
使用配置值
当你想在其他扩展中使用配置值时,你可以通过 PhabricatorEnv::getEnvConfig
调用按键引用这些配置值:
// Use PhabricatorEnv::getEnvConfig() to get config values if(PhabricatorEnv::getEnvConfig('bugzilla.require_bugs') === true) { // ... }
getEnvConfig
返回的值属于配置扩展中定义的类型。
我非常喜欢使用通过用户界面定义的配置值;替代方案通常需要重新部署,在紧急情况下,这是最坏的情况。当价值观易于定义、更改和使用时,您就会发现自己处于双赢局面,而这应该永远如此!