Quay lại

Build Laravel artisan commands cho dự án của bạn Chuyên mục PHP và Laravel    2023-07-26    1.2k Lượt xem    30 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Build Laravel artisan commands cho dự án của bạn

Khi làm việc trong một dự án, sẽ có lúc bạn cần tự động hóa một số tác vụ nhất định. Trong những trường hợp như vậy, tốt hơn là sử dụng công cụ CLI có thể chạy từ command prompt vì việc sử dụng API web cho một số tác vụ nhất định rất cồng kềnh

Laravel đi kèm với công cụ Artisan CLI đi kèm với các lệnh có thể hỗ trợ bạn trong khi xây dựng ứng dụng của mình. Về cơ bản, Artisan's Command đang sử dụng lệnh Symphony, với một số tiện ích và phím tắt bổ sung.

Laravel Artisan cung cấp các lệnh có thể hữu ích để tạo models, controllers, middleware, test cases và nhiều loại tệp khác cho framework. Để xem danh sách tất cả các lệnh Artisan có sẵn, bạn có thể sử dụng lệnh list:

php artisan list

Viết một command trong Laravel của riêng bạn

Laravel đang cung cấp gần như tất cả các lệnh mà bạn sẽ yêu cầu trong quy trình phát triển của mình, điều này thật tuyệt. Nhưng nếu muốn, bạn cũng có thể tạo các lệnh Artisan tùy chỉnh của riêng mình trong Laravel theo nhu cầu dự án của bạn.

Hãy lấy một ví dụ mà bạn cần gửi email chúc mừng năm mới tới tất cả người dùng của mình vào ngày đầu năm mới. Bạn có thể sử dụng lệnh Artisan tùy chỉnh trong trường hợp này. Trước hết, chúng ta sẽ tạo một lớp có thể gửi email sẽ được sử dụng để gửi email. Lớp mailable chịu trách nhiệm gửi email bằng cách sử dụng mailer được cấu hình trong tệp config/mail.php. Trên thực tế, Laravel đã cung cấp lệnh thủ công cho phép chúng ta tạo một template mẫu.

php artisan make:mail SendEmail

Điều đó sẽ tạo một mẫu email trống tại app/Mail/SendEmail.php, như được hiển thị trong đoạn mã sau.

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {


    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test');
    }
}

Bây giờ, chúng ta sẽ tạo một lệnh Artisan sẽ được sử dụng để gửi email đến tất cả người dùng của bộ sưu tập Người dùng. Để làm được điều đó, bạn cần sử dụng lệnh make:command Artisan. Lệnh này sẽ tạo một command class mới trong thư mục app/Console/Commands. Lệnh được tạo sẽ bao gồm tập hợp các thuộc tính và phương thức mặc định có trên tất cả các lệnh:

php artisan make:command SendNewYearEmail

Lệnh này tạo một lớp trong tệp app/Console/Commands/SendNewYearEmail.php. Nếu bạn mở tệp, bạn sẽ thấy các thuộc tính $signature$description cũng như phương thức handle() là nội dung của lệnh console của bạn.

Hãy thực hiện các thay đổi đối với tệp để trông giống như bên dưới:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class SendNewYearEmail extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sendnewyearemail';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send an email to all the users';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}

Ở đây, các thuộc tính $signature và $description của lớp sẽ được sử dụng khi hiển thị lệnh của bạn trên cửa sổ dòng lệnh. Phương thức handle sẽ được gọi khi lệnh của bạn được thực thi. Bạn có thể đặt logic lệnh của mình trong phương thức này.

Tiếp theo, đăng ký lệnh trong tệp app/Console/Kernel.php:

protected $commands = [
    Commands\SendNewYearEmail::class,
];

Bây giờ, tất cả những gì còn lại là triển khai logic để gửi email cho người dùng mà chúng ta sẽ viết trong phương thức handle . Đối với điều này, trước tiên, chúng ta sẽ tìm nạp tất cả người dùng và lặp qua họ để gửi email riêng cho họ. Để gửi email, chúng ta sẽ sử dụng lớp SendMail mà chúng ta đã tạo trước đó.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\User;
use App\Mail\SendEmail;
use Mail;

class SendNewYearEmail extends Command
{

    // commented for brevity

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info('Started sending emails...');

        $users = User::all();

        $email = new SendEmail();

        foreach($users as $user)
        {
            Mail::to($user->email)->send($email);
        }

        $this->info('Email sent to all the users!');
    }
}

Như bạn có thể thấy ở trên, để hiển thị output trên màn hình console, sử dụng các phương thức lineinfocommentquestion và error. Mỗi phương pháp này sẽ sử dụng các màu ANSI thích hợp cho mục đích của chúng. Trong trường hợp này, phương thức info sẽ hiển thị trong bảng điều khiển dưới dạng văn bản màu xanh lá cây.

Bây giờ, tất cả những gì bạn cần để kích hoạt lệnh thủ công sau để phục vụ mục đích tương tự:

php artisan sendnewyearemail

Ngoài ra, bạn cũng có thể thu thập đầu vào của người dùng hoặc cung cấp đối số cho lệnh. Thuộc tính signature cho phép bạn xác định tên, đối số và các tùy chọn cho lệnh theo một số cú pháp single, expressive, route-like . Chẳng hạn, hãy cung cấp một tùy chọn cho lệnh sẽ chỉ gửi email đến những người dùng đang hoạt động. Vì vậy, signature property của chúng ta sẽ như dưới đây:

/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'sendnewyearemail {--active}';

Và bạn có thể sử dụng option trong phương thức handle để lấy value active đã định nghĩa bằng phương thức tùy chọn:

/**
 * Execute the console command.
 *
 * @return mixed
    */
public function handle()
{
    $this->info('Started sending emails...');

    if ($this->option('active')) {
        $users = User::Where('active', '=', '1')->get();
    } else {
        $users = User::all();
    }

    $email = new SendEmail();

    foreach($users as $user)
    {
        Mail::to($user->email)->send($email);
    }

    $this->info('Email sent to all the users!');
}

 Kết luận

Có rất nhiều thứ bạn có thể đạt được bằng cách sử dụng lệnh Artisan. Như đã trình bày trong phần hướng dẫn ở trên, bạn có thể tự động hóa những việc như gửi email chỉ bằng một lệnh. Các chức năng là nhiều vô kể. Hãy cho mình biết nếu bạn cần bất kỳ chỉnh sửa hoặc cải tiến nào trong bài viết ở phần bình luận bên dưới nhé ! Xin cảm ơn

 
 
 
 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday