Artisan Konsoli
Kirish
Artisan - Goravel bilan birga keladigan, buyruq qatori bilan ishlash uchun CLI vositasidir. Siz uni facades.Artisan() yordamida ochishingiz mumkin. Ushbu vosita sizning ilovangizni rivojlantirishda yordam beradigan bir nechta foydali buyruqlarga ega. Barcha mavjud buyruqlarni ko'rish uchun quyidagi buyruqdan foydalaning.
./artisan ro'yxat
# yoki
go run . artisan ro'yxatHar bir buyruq shuningdek, buyruq bilan bog'liq argumentlar va opsiyalarni ko'rsatadigan va tushuntiradigan "yordam" bayrog'iga ega:
./artisan migrate --yordam./artisan ... buyrug'ini takrorlash o'rniga, quyidagi terminal buyrug'i bilan o'z shell konfiguratsiyangizga taxallus qo'shishingiz mumkin:
echo -e "\r\nalias artisan=\"go run . artisan\"" >>~/.zshrcKeyin siz buyruqlaringizni shunchaki shunday ishga tushirishingiz mumkin:
artisan make:controller DemoControllerShuningdek, siz artisan shell skriptidan shunday foydalanishingiz mumkin:
Buyruqlarni yaratish
Siz make:command buyrug'idan app/console/commands katalogida yangi buyruq yaratish uchun foydalanishingiz mumkin. Agar bu katalog sizning ilovangizda mavjud bo'lmasa, tashvishlanmang, u siz make:command buyrug'ini birinchi marta ishga tushirganingizda yaratiladi:
./artisan make:command SendEmails
./artisan make:command user/SendEmailsBuyruqlarni ro'yxatdan o'tkazish
Barcha buyruqlar bootstrap/app.go faylidagi WithCommands funksiyasi orqali ro'yxatdan o'tkazilishi kerak:
func Boot() contractsfoundation.Application {
return foundation.Setup().
WithCommands(Commands).
WithConfig(config.Boot).
Create()
}make:command tomonidan yaratilgan yangi buyruq bootstrap/commands.go::Commands() funksiyasida avtomatik ro'yxatdan o'tkaziladi va funksiya WithCommands tomonidan chaqiriladi. Agar buyruq faylini o'zingiz yaratgan bo'lsangiz, buyruqni qo'lda ro'yxatdan o'tkazishingiz kerak.
Buyruq tuzilmasi
Buyruqni yaratgandan so'ng, structning signature va description xususiyatlariga mos qiymatlarni belgilang. Buyruq bajarilganda Handle usuli chaqiriladi. Siz ushbu metodda o'z mantiqingizni amalga oshirishingiz kerak.
paket buyruqlari
import (
"github.com/goravel/framework/contracts/console"
"github.com/goravel/framework/contracts/console/command"
)
type SendEmails struct {
}
// Imzo Konsol buyrug'ining nomi va imzosi.
func (receiver *SendEmails) Signature() string {
return "send:emails"
}
// Tavsif Konsol buyrug'ining tavsifi.
func (receiver *SendEmails) Description() string {
return "Elektron pochta xabarlarini yuborish"
}
// Kengaytma Konsol buyrug'ining kengaytmasi.
func (receiver *SendEmails) Extend() command.Extend {
return command.Extend{}
}
// Boshqarish Konsol buyrug'ini bajarish.
func (receiver *SendEmails) Handle(ctx console.Context) error {
return nil
}Buyruq kirish/chiqish
Kirishni olish
Konsol buyruqlarini yozishda, odatda foydalanuvchi kiritimini argumentlar yoki opsiyalar orqali yigʻish mumkin. Goravel bilan foydalanuvchi taqdim etgan argumentlar va opsiyalarni olish juda oson.
Argumentlar
Buyruqdan keyingi argumentlarni kuzating:
./artisan send:emails SUBJECT EMAIL_1 EMAIL_2Ta'rif:
// send:emails <0> <1>
func (receiver *SendEmails) Extend() command.Extend {
return command.Extend{
Arguments: []command.Argument{
&command.ArgumentString{
Name: "subject",
Usage: "elektron pochta mavzusi",
Required: true,
},
&command.ArgumentStringSlice{
Name: "emails",
Usage: "maqsadli elektron pochta manzillari",
Min: 1,
Max: -1,
},
},
}Qo'llab-quvvatlanadigan argument turlari: ArgumentFloat32, ArgumentFloat64, ArgumentInt, ArgumentInt8, ArgumentInt16, ArgumentInt32, ArgumentInt64, ArgumentString, ArgumentUint, ArgumentUint8, ArgumentUint16, ArgumentUint32, ArgumentUint64, ArgumentTimestamp, ArgumentFloat32Slice, ArgumentFloat64Slice, ArgumentIntSlice, ArgumentInt8Slice, ArgumentInt16Slice, ArgumentInt32Slice, ArgumentInt64Slice, ArgumentStringSlice, ArgumentUintSlice, ArgumentUint8Slice, ArgumentUint16Slice, ArgumentUint32Slice, ArgumentUint64Slice, ArgumentTimestampSlice
Bitta qiymatni qo‘llab-quvvatlovchi argument turlari quyidagi maydonlarni qo‘llab-quvvatlaydi:
Ism string // bu argumentning nomi
Qiymat T // bu argumentning standart qiymati
Foydalanish string // ko'rsatish uchun foydalanish matni
Majburiy bool // agar bu argument majburiy bo'lsa"Slice" argument turlari maydonlari:
Ism string // bu argumentning nomi
Qiymat T // bu argumentning standart qiymati
Foydalanish string // ko'rsatiladigan foydalanish matni
Min int // bu argumentning minimal takrorlanish soni
Max int // bu argumentning maksimal takrorlanish soni, cheksiz uchun -1 ga o'rnatingTimestamp argumentlari qo'shimcha ravishda Layouts []string maydonini qo'llab-quvvatlaydi, bu qo'llab-quvvatlanadigan layoutlar bilan to'ldirilishi kerak
Argumentlarni oling:
func (receiver *SendEmails) Handle(ctx console.Context) error {
subject := ctx.ArgumentString("subject")
emails := ctx.ArgumentStringSlice("emails")
return nil
}Boshqa yo'l sifatida, argumentlarga to'g'ridan-to'g'ri kirish mumkin:
func (qabul qiluvchi *EmailYuborish) Boshqarish(ctx console.Context) xato {
ism := ctx.Argument(0)
email := ctx.Argument(1)
hammasi := ctx.Arguments()
return nil
}Parametrlar
Opsiyalar, argumentlar singari, foydalanuvchi kiritishining yana bir shaklidir. Parametrlar buyruq qatori orqali taqdim etilganda, ikkita tire (--) bilan boshlanadi.
Ta'rif:
func (receiver *ListCommand) Extend() command.Extend {
return command.Extend{
Flags: []command.Flag{
&command.StringFlag{
Name: "lang",
Value: "default",
Aliases: []string{"l"},
Usage: "salomlashish uchun til",
},
},
}
}Oling:
func (qabul qiluvchi *ListCommand) Handle(ctx console.Context) xato {
til := ctx.Option("til")
return nil
}Foydalanish:
./artisan emails --lang Xitoy
./artisan emails -l Xitoycommand.StringFlag dan tashqari, biz boshqa turdagi Flag va Option* lardan ham foydalanishimiz mumkin: StringSliceFlag, BoolFlag, Float64Flag, Float64SliceFlag, IntFlag, IntSliceFlag, Int64Flag, Int64SliceFlag.
Kirishni So'rash
Savollar berish
Argumentlar va opsiyalardan tashqari, siz buyruq bajarilayotganda foydalanuvchidan kirish so'rashingiz mumkin. Ask usuli foydalanuvchiga berilgan savolni ko'rsatadi va ularning javobini qaytaradi:
func (receiver *SendEmails) Handle(ctx console.Context) error {
email, err := ctx.Ask("Elektron pochta manzilingiz nima?")
return err
}Bundan tashqari, Ask metodiga opsiyalarni ixtiyoriy ikkinchi argument sifatida o‘tkazishingiz mumkin:
func (qabul qiluvchi *SendEmails) Handle(ctx console.Context) xato {
ism, xato := ctx.Ask("Ismingiz nima?", console.AskOption{
Default: "Krishan",
})
return xato
}
// Mavjud opsiyalar
type AskOption struct {
// Default - kiritish uchun standart qiymat.
Default string
// Description - kiritish tavsifi.
Description string
// Lines - kiritish uchun qatorlar soni.(ko'p qatorli matn uchun ishlatiladi)
Lines int
// Limit - kiritish uchun belgilar chegarasi.
Limit int
// Multiple - kiritish bitta qator yoki ko'p qatorli matn ekanligini aniqlaydi
Multiple bool
// Placeholder - kiritish uchun joy egallovchi.
Placeholder string
// Prompt - so'rov xabari.(bitta qatorli kiritish uchun ishlatiladi)
Prompt string
// Validate - kiritishni tekshirish funksiyasi.
Validate func(string) xato
}Ba'zan foydalanuvchi kiritishini yashirish kerak bo'lishi mumkin, masalan, parol so'rashda. Siz foydalanuvchi kiritishini yashirish uchun Secret usulidan foydalanishingiz mumkin:
func (receiver *SendEmails) Handle(ctx console.Context) error {
password, err := ctx.Secret("Parol nima?", console.SecretOption{
Validate: func (s string) error {
if len(s) < 8 {
return errors.New("parol uzunligi kamida 8 bo'lishi kerak")
}
return nil
},
})
return err
}
// Mavjud variantlar
type SecretOption struct {
// Default - kiritish uchun standart qiymat.
Default string
// Description - kiritish tavsifi.
Description string
// Limit - kiritish uchun belgilar chegarasi.
Limit int
// Placeholder - kiritish uchun belgilovchi.
Placeholder string
// Validate - kiritishni tekshirish funksiyasi.
Validate func(string) error
}Amallarni tasdiqlash
Agar foydalanuvchidan harakatni davom ettirishdan oldin tasdiqlashni so'rashingiz kerak bo'lsa, Confirm usulidan foydalanishingiz mumkin. Standart holatda, ushbu metod foydalanuvchi ijobiy variantni tanlamaguncha false qiymatini qaytaradi.
agar ctx.Confirm("Davom etishni xohlaysizmi?") {
// ...
}Shuningdek, siz Confirm usuliga ikkinchi argument berib, standart qiymatni, ijobiy va salbiy tugmalarning yorlig'ini sozlashingiz mumkin:
if ctx.Confirm("Do you wish to continue?", console.ConfirmOption{
Default : true,
Affirmative : "Yes",
Negative : "No",
}) {
// ...
}
// Available options
type ConfirmOption struct {
// Affirmative label for the affirmative button.
Affirmative string
// Default the default value for the input.
Default bool
// Description the input description.
Description string
// Negative label for the negative button.
Negative string
}Bitta tanlovli savollar
Agar foydalanuvchidan ro'yxatdan variant tanlashni so'rashingiz kerak bo'lsa, Choice usulidan foydalanishingiz mumkin. Choice usuli tanlangan variantning qiymatini qaytaradi:
question := "What is your favorite programming language?"
options := []console.Choice{
{Key: "go", Value: "Go"},
{Key: "php", Value: "PHP"},
{Key: "python", Value: "Python"},
{Key: "cpp", Value: "C++", Selected: true},
}
color, err := ctx.Choice(question, options)Shuningdek, siz Choice usuliga ixtiyoriy ikkinchi argument sifatida opsiyalarni o‘tkazishingiz mumkin:
question := "What is your favorite programming language?"
options := []console.Choice{
{Key: "go", Value: "Go"},
{Key: "php", Value: "PHP"},
{Key: "python", Value: "Python"},
{Key: "cpp", Value: "C++", Selected: true},
}
color, err := ctx.Choice(question, options, console.ChoiceOption{
Default: "go",
})
// Available options
type ChoiceOption struct {
// Default the default value for the input.
Default string
// Description the input description.
Description string
// Validate the input validation function.
Validate func(string) error
}Ko'p tanlovli savollar
Agar foydalanuvchidan ro'yxatdan bir nechta variantlarni tanlashni so'rashingiz kerak bo'lsa, MultiSelect usulidan foydalanishingiz mumkin. MultiSelect usuli tanlangan variantlarning qiymatlarini qaytaradi:
question := "What are your favorite programming languages?"
options := []console.Choice{
{Key: "go", Value: "Go"},
{Key: "php", Value: "PHP"},
{Key: "python", Value: "Python"},
{Key: "cpp", Value: "C++", Selected: true},
}
colors, err := ctx.MultiSelect(question, options)Bundan tashqari, siz MultiSelect usuliga ixtiyoriy ikkinchi argument sifatida variantlarni o‘tkazishingiz mumkin:
question := "What are your favorite programming languages?"
options := []console.Choice{
{Key: "go", Value: "Go"},
{Key: "php", Value: "PHP"},
{Key: "python", Value: "Python"},
{Key: "cpp", Value: "C++", Selected: true},
}
colors, err := ctx.MultiSelect(question, options, console.MultiSelectOption{
Default: []string{"go", "php"},
})
// Available options
type MultiSelectOption struct {
// Default the default value for the input.
Default []string
// Description the input description.
Description string
// Filterable determines if the choices can be filtered, type `/` to starting filter.
Filterable bool
// Limit the number of choices that can be selected.
Limit int
// Validate the input validation function.
Validate func([]string) error
}Chiqish yozish
Ba'zan siz konsolga chiqish yozishingiz kerak bo'lishi mumkin. Goravel sizga konsolga chiqish yozishda yordam beradigan bir nechta usullarni taqdim etadi. Har bir metod o'ziga xos rangli chiqishga ega. Masalan, Error matnni qizil rangda ko'rsatadi.
func (receiver *SendEmails) Handle(ctx console.Context) error {
ctx.Comment("Bu izoh xabari")
ctx.Info("Bu ma'lumot xabari")
ctx.Error("Bu xato xabari")
ctx.Line("Bu qator xabari")
ctx.Warning("Bu ogohlantirish xabari")
return nil
}Mos rangga mos yozish uchun bir nechta yordamchilar mavjud:
ctx.Green("Bu yashil xabar")
ctx.Greenln("Bu yashil chiziqli xabar")
ctx.Red("Bu qizil xabar")
ctx.Redln("Bu qizil chiziqli xabar")
ctx.Yellow("Bu sariq xabar")
ctx.Yellowln("Bu sariq chiziqli xabar")
ctx.Black("Bu qora xabar")
ctx.Blackln("Bu qora chiziqli xabar")Siz NewLine usulidan foydalanib konsolga yangi qator yozishingiz mumkin:
// bitta bo'sh qator yozish
ctx.NewLine()
// bir nechta bo'sh qatorlar yozish
ctx.NewLine(2)Progress Bars
Uzoq davom etadigan vazifalar uchun, foydalanuvchiga vazifa qancha vaqt oladi haqida ma'lumot berish foydali bo'ladi. Siz taraqqiyot panelini ko'rsatish uchun WithProgressBar usulidan foydalanishingiz mumkin.
items := []any{"item1", "item2", "item3"}
_, err := ctx.WithProgressBar(items, func(item any) error {
// performTask(item)
return nil
})Ba'zan siz progress bar-ni qo'lda yangilashingiz kerak bo'lishi mumkin. Siz progress bar-ni yangilash uchun CreateProgressBar usulidan foydalanishingiz mumkin:
users := []string{"user1", "user2", "user3"}
bar := ctx.CreateProgressBar(len(users))
err := bar.Start()
for _, user := range users {
// process user
bar.Advance()
// sleep for a while to simulate processing
time.Sleep(time.Millisecond * 50)
}
err = bar.Finish()Aylana
Agar vazifa bajarilayotganda spinner ko'rsatish kerak bo'lsa, Spinner metodidan foydalanishingiz mumkin.
err := ctx.Spinner("Yuklanmoqda...", console.SpinnerOption{
Action: func() error {
// spinner qachon to'xtatilishi kerak
time.Sleep(2 * time.Second)
return nil
},
})Ajratgich
Terminal kengligidagi ajratuvchini ko'rsatish uchun Divider metodidan foydalanishingiz mumkin.
ctx.Divider() // ----------
ctx.Divider("=>") // =>=>=>=>=>Kategoriya
Siz bir qator buyruqlarni bir xil kategoriyaga o'rnatishingiz mumkin, bu ./artisan list da qulay:
// Konsol buyrug'ini kengaytirish.
func (receiver *ConsoleMakeCommand) Extend() command.Extend {
return command.Extend{
Category: "make",
}
}Dasturiy tarzda buyruqlarni bajarish
Ba'zan siz Artisan buyrug'ini CLI tashqarisida bajarishingiz mumkin, buning uchun facades.Artisan() da Call metodidan foydalanishingiz mumkin.
facades.Route().Get("/", func(c *gin.Context) {
facades.Artisan().Call("emails")
facades.Artisan().Call("emails --lang Chinese name") // With arguments and options
})Chop etish ranglarini o‘chirish
Ba'zi buyruqlar standart ravishda ranglarni chiqaradi, masalan, list buyrug'i. Biroq, ba'zi terminal yoki jurnallarda rang qiymatlari noto'g'ri ko'rsatilishi mumkin. Siz chop ranglarini o'chirish uchun --no-ansi opsiyasidan foydalanishingiz mumkin:
./artisan ro'yxat --no-ansi