Sinalizadores de comando
Os sinalizadores são parâmetros nomeados mencionados com dois hifens (--) ou um único hífen (-) (conhecido como alias do sinalizador). Os sinalizadores podem ser mencionados em qualquer ordem.
Você deve definir os sinalizadores como propriedades de classe e decorá-los usando o decorador @flags. No exemplo a seguir, definimos os sinalizadores resource e singular, e ambos representam um valor booleano.
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeControllerCommand extends BaseCommands {
@flags.boolean()
declare resource: boolean
@flags.boolean()
declare singular: boolean
}Tipos de sinalizadores
O Ace permite definir sinalizadores para um dos seguintes tipos.
Sinalizador booleano
Um sinalizador booleano é definido usando o decorador @flags.boolean. Mencionar o sinalizador definirá seu valor como true. Caso contrário, o valor do sinalizador será undefined.
make:controller --resource
# this.resource === truemake:controller
# this.resource === undefinedmake:controller --no-resource
# this.resource === falseO último exemplo mostra que os sinalizadores booleanos podem ser negados com o prefixo --no-.
Por padrão, a opção negada não é mostrada na saída de ajuda. No entanto, você pode habilitá-la usando a opção showNegatedVariantInHelp.
export default class MakeControllerCommand extends BaseCommands {
@flags.boolean({
showNegatedVariantInHelp: true,
})
declare resource: boolean
}Sinalizador de string
Um sinalizador de string aceita um valor após o nome do sinalizador. Você pode definir um sinalizador de string usando o método @flags.string.
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeControllerCommand extends BaseCommands {
@flags.string()
declare model: string
}make:controller --model user
# this.model = 'user'Se o valor do sinalizador tiver espaços ou caracteres especiais, ele deve ser colocado entre aspas "".
make:controller --model blog user
# this.model = 'blog'
make:controller --model "blog user"
# this.model = 'blog user'Um erro é exibido se o sinalizador for mencionado, mas nenhum valor for fornecido (mesmo quando o sinalizador for opcional).
make:controller
# Works! The optional flag is not mentioned
make:controller --model
# Error! Missing valueSinalizador numérico
A análise de um sinalizador numérico é semelhante ao sinalizador de string. No entanto, o valor é validado para garantir que seja um número válido.
Você pode criar um sinalizador numérico usando o decorador @flags.number.
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeUserCommand extends BaseCommands {
@flags.number()
declare score: number
}Sinalizador de matriz
O sinalizador de matriz permite o uso do sinalizador várias vezes ao executar um comando. Você pode definir um sinalizador de matriz usando o método @flags.array.
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeUserCommand extends BaseCommands {
@flags.array()
declare groups: string[]
}make:user --groups=admin --groups=moderators --groups=creators
# this.groups = ['admin', 'moderators', 'creators']Nome e descrição do sinalizador
Por padrão, o nome do sinalizador é uma representação tracejada do nome da propriedade da classe. No entanto, você pode definir um nome personalizado por meio da opção flagName.
@flags.boolean({
flagName: 'server'
})
declare startServer: booleanA descrição do sinalizador é exibida na tela de ajuda. Você pode defini-la usando a opção description.
@flags.boolean({
flagName: 'server',
description: 'Starts the application server'
})
declare startServer: booleanAliases de sinalizadores
Aliases os nomes abreviados para um sinalizador mencionado usando um único hífen (-). Um alias deve ser um único caractere.
@flags.boolean({
aliases: ['r']
})
declare resource: boolean
@flags.boolean({
aliases: ['s']
})
declare singular: booleanOs aliases de sinalizadores podem ser combinados ao executar o comando.
make:controller -rs
# O mesmo que
make:controller --resource --singularValor padrão
Você pode definir o valor padrão para um sinalizador usando a opção default. O valor padrão é usado quando o sinalizador não é mencionado ou é mencionado sem um valor.
@flags.boolean({
default: true,
})
declare startServer: boolean
@flags.string({
default: 'sqlite',
})
declare connection: stringProcessando valor do sinalizador
Usando o método parse, você pode processar o valor do sinalizador antes que ele seja definido como propriedade de classe.
@flags.string({
parse (value) {
return value ? connections[value] : value
}
})
declare connection: stringAcessando todos os sinalizadores
Você pode acessar todos os sinalizadores mencionados ao executar o comando usando a propriedade this.parsed.flags. A propriedade flags é um objeto de par chave-valor.
import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeControllerCommand extends BaseCommands {
@flags.boolean()
declare resource: boolean
@flags.boolean()
declare singular: boolean
async run() {
console.log(this.parsed.flags)
/**
* Nomes de sinalizadores mencionados, mas não
* aceitos pelo comando
*/
console.log(this.parsed.unknownFlags)
}
}