
Fabricante é uma excelente ferramenta de revisão de código usada pelo Facebook e por outras organizações respeitadas de engenharia de software. A interface do usuário é bonita, o fluxo de trabalho e as ferramentas são concisos e abrangentes, e é um utilitário que abrange a maioria dos casos de uso, tanto na Web quanto na linha de comando. Escrevi muitas extensões do Phabricator e descobri que criar uma única extensão de configuração para ser usada por outras extensões é de grande utilidade. Vamos ver como é fácil criar sua própria configuração personalizada para ser usada em todas as suas extensões!
Criando a extensão de configuração
Comece criando uma nova classe que estende a PhabricatorApplicationConfigOptions:
final class PhabricatorBugzillaConfigOptions
extends PhabricatorApplicationConfigOptions {
// ....
}
Preencha alguns métodos padrão:
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';
}
O getOptions é onde as configurações individuais são definidas; vamos criar algumas configurações de exemplo:
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.')),
);
}
Essas configurações são traduzidas para a interface do usuário da seguinte maneira:

O tipo de valor de configuração é importante, pois o Phabricator o lê e renderiza um campo relevante para o tipo; por exemplo, bool fornecem um menu suspenso True/False (Verdadeiro/Falso).
Uso de valores de configuração
Quando quiser usar valores de configuração em outras extensões, o senhor pode fazer referência a esses valores de configuração por chave com PhabricatorEnv::getEnvConfig chamadas:
// Use PhabricatorEnv::getEnvConfig() to get config values
if(PhabricatorEnv::getEnvConfig('bugzilla.require_bugs') === true) {
// ...
}
O valor retornado pelo getEnvConfig é do tipo definido na extensão de configuração.
Sou um grande fã do uso de valores de configuração definidos por meio de uma interface de usuário; a alternativa geralmente requer uma reimplantação e, em casos de emergência, esse é o pior cenário possível. Quando os valores são fáceis de definir, alterar e usar, o senhor se encontra em uma situação de ganho/ganho/ganho, e é assim que deve ser sempre!