post-image

Console Command trong laravel (Phần 2)

Tổng quan

Chúng ta cùng tiếp tục tìm hiểu về Console Command trong Laravel để áp dụng vào viết các command cần thiết khi thiết kế web bds nhé. Các bạn tham khảo bài trước đó là: Console Command trong laravel (phan 1)

Command I/O trong laravel là gì?

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:

Retrieving Input

/** * Execute the console command. * * @return mixed */ public function handle() { $userId = $this->argument('user'); // }
Code language: PHP (php)

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:

$arguments = $this->arguments();
Code language: JavaScript (javascript)

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:

// Retrieve a specific option... $queueName = $this->option('queue'); // Retrieve all options... $options = $this->options();
Code language: PHP (php)

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:

/** * Execute the console command. * * @return mixed */ public function handle() { $name = $this->ask('What is your name?'); }
Code language: PHP (php)

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:

$password = $this->secret('What is the password?');
Code language: PHP (php)

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:

if ($this->confirm('Do you wish to continue?')) { // }
Code language: PHP (php)

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.

$name = $this->anticipate('What is your name?', ['Taylor', 'Dayle']);
Code language: PHP (php)

Writing Output

Để gửi output đến console, sử dụng các phương thức lineinfocommentquestion 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.

/** * Execute the console command. * * @return mixed */ public function handle() { $this->info('Display this on the screen'); }
Code language: PHP (php)

Để hiển thị 1 error message, sử dụng phương thức error. Error message thường hiển thị màu đỏ

$this->error('Something went wrong!');
Code language: PHP (php)

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:

$this->line('Display this on the screen');
Code language: PHP (php)

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:

$headers = ['Name', 'Email']; $users = App\User::all(['name', 'email'])->toArray(); $this->table($headers, $users);
Code language: PHP (php)

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:

$users = App\User::all(); $bar = $this->output->createProgressBar(count($users)); foreach ($users as $user) { $this->performTask($user); $bar->advance(); } $bar->finish();
Code language: PHP (php)

Để biết thêm các advanced option, đọc thêm tại .

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:

protected $commands = [ Commands\SendEmails::class ];
Code language: PHP (php)

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:

Route::get('/foo', function () { Artisan::queue('email:send', [ 'user' => 1, '--queue' => 'default' ]); // });
Code language: PHP (php)

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:

$exitCode = Artisan::call('migrate:refresh', [ '--force' => true, ]);
Code language: PHP (php)

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 :

/** * Execute the console command. * * @return mixed */ public function handle() { $this->call('email:send', [ 'user' => 1, '--queue' => 'default' ]); // }
Code language: PHP (php)

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:

$this->callSilent('email:send', [ 'user' => 1, '--queue' => 'default' ]);
Code language: PHP (php)

Bài viết này được tổng hợp từ Internet nhiều nguồn quốc tế khác nhau biên soạn lại, chúng tôi không chịu trách nhiệm về nội dung bài viết này, nếu việc áp dụng vào dự án của bạn có sai sót hay liên hệ với chúng tôi để cập nhật lại nội dung nhé.

Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Tham khảo: LEVANPHU

Leave a Reply

Your email address will not be published.