Laravel: Console Command Phần 2
https://viblo.asia/p/laravel-console-command-phan-2-maGK7E7alj2
Laravel: Console Command Phần 2
Bài đăng này đã không được cập nhật trong 4 năm
Chúng ta cùng tiếp tục tìm hiểu về Console Command trong Laravel.
Các bạn tham khảo phần 1 tại đây.
Command I/O
Retrieving Input
Trong khi command của bạn được thực hiện, bạn sẽ chắc chắn cần phải truy cập vào các đối số và các option được chấp nhận bởi command của bạn. Để làm như vậy, bạn có thể sử dụng phương thức argument
và option
:
Nếu bạn cần phải lấy tất cả các argument như 1 array
, gọi phương thức arguments
:
option có thể được lấy ra dễ dành như argument bằng cách sử dụng phương thức option
. Để lấy tất cả các option như 1 array
, ta gọi phương thức options
:
Nếu option hoặc argument không tồn tại, nó sẽ trả về null
.
Prompting For Input
Ngoài việc hiển thị output, bạn cũng có thể yêu cầu người dùng cung cấp input trong quá trình thực hiện command của bạn. Phương thức ask
sẽ nhắc nhở người dùng với câu hỏi được đưa ra, chấp nhận inout của họ, và sau đó trả về input của người dùng trở lại command của bạn:
Các phương thức secret
cũng tương tự như ask
, nhưng input của người dùng sẽ không được hiển thị khi họ gõ vào console. Phương thức này rất hữu ích khi yêu cầu thông tin nhạy cảm như password:
Asking For Confirmation
Nếu bạn cần phải hỏi người dùng để confirm, bạn có thể sử dụng phương thức confirm
. Theo mặc định, phương thức này sẽ trả về false
. Tuy nhiên, nếu người dùng nhập vào y
hoặc yes
, phương thức này sẽ trả về true
:
Auto-Completion
Phương thức anticipate
có thể được sử dụng để cung cấp tính năng tự động hoàn thiện cho các lựa chọn có thể. Người dùng vẫn có thể lựa chọn bất kỳ câu hỏi, bất kể gợi ý của auto-completion.
Writing Output
Để gửi output đến console, sử dụng các phương thức line
, info
, comment
, question
và error
. Mỗi phương thức này sẽ sử dụng màu sắc ANSI thích hợp cho mục đích của từng lệnh. Ví dụ, hãy hiển thị một số thông tin chung cho người dùng. Thông thường, phương thức info
sẽ hiển thị trong console với text màu xanh lá cây.
Để hiển thị 1 error message, sử dụng phương thức error
. Error message thường hiển thị màu đỏ
Nếu bạn muốn hiển thị đơn giản, không có màu ở console output, sử dụng phương thức line
:
Table Layouts
Phương thức table
làm cho nó dễ dàng để định dạng một cách chính xác nhiều row / column của dữ liệu. Chỉ cần pass trong header và row của phương thức. Chiều rộng và chiều cao sẽ được tự động tính toán dựa trên dữ liệu đưa ra:
Progress Bars
Đối với task chạy dài, nó có thể hữu ích để hiển thị tiến trình chạy. Sử dụng các các output object, chúng ta có thể start, advance và stop thanh tiến trình. Đầu tiên, xác định tổng số các bước quá trình sẽ chạy qua, sau đó advance Bar Progress mỗi khi chạy qua một mục:
Để biết thêm các advanced option, đọc thêm tại Symfony Progress Bar component documentation..
Registering Commands
Một khi command của bạn được hoàn tất, bạn cần phải đăng ký nó với Artisan
. Tất cả các command được đăng ký trong file app/Console/Kernel.php
. Trong file này, bạn sẽ tìm thấy một danh sách các command trong commands
property. Để đăng ký command của bạn, chỉ cần thêm tên Class của command vào danh sách. Khi khởi động thủ công, tất cả các lệnh được liệt kê trong property này sẽ được giải quyết bởi các service container và đăng ký với Artisan
:
Programmatically Executing Commands
Đôi khi, bạn có thể muốn thực hiện 1 lệnh Artisan
ngoài CLI. Ví dụ, bạn có thể muốn bắn 1 Artisan
command từ một route hoặc controller. Bạn có thể sử dụng phương thức call
trên Artisan
facade để thực hiện điều này. Phương thức call
cấp nhận tên của command như argument đầu tiên và một array các tham số của command là argument thứ 2. Exit code sẽ được trả lại:
Nếu bạn cần phải xác định giá trị của 1 option mà không chấp nhận các string value, giống như --force
flag trên migrate:refresh
command, bạn có thể pass true
hoặc false
:
Calling Commands From Other Commands
Đôi khi bạn có thể muốn gọi command khác từ một Artisan
command đã tồn tại. Bạn có thể sử dụng phương thức call
. Phương thức call
chấp nhận tên command và một array các tham số của command :
Nếu bạn muốn gọi một console command và ngăn chắn tất cả các output của nó, bạn có thể sử dụng phương thức callSilent
. Phương thức callSilent
có signature giống như phương thức call
:
Hy vọng bài viết này là hữu ích với các bạn! ^^
Last updated