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
类型提供真/假下拉菜单。
使用配置值
当你想在其他扩展中使用配置值时,你可以通过 key 引用这些配置值 PhabricatorEnv::getEnvConfig
调用:
// Use PhabricatorEnv::getEnvConfig() to get config values
if(PhabricatorEnv::getEnvConfig('bugzilla.require_bugs') === true) {
// ...
}
返回的值 getEnvConfig
是配置扩展中定义的类型。
我非常喜欢使用通过用户界面定义的配置值; 替代方案通常需要重新部署,在紧急情况下,这是最坏的情况。 当价值观很容易定义、改变和使用时,你就会发现自己处于双赢/双赢的局面,这就是它应该永远的样子!