Quay lại

Conditionally executing callbacks sử dụng Conditionable trait Laravel Chuyên mục PHP và Laravel    2023-09-10    95 Lượt xem    39 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Conditionally executing callbacks sử dụng Conditionable trait Laravel

Nếu gần đây bạn đang làm việc với Laravel, bạn có thể đã sử dụng tính năng này được gọi là “conditional clauses - mệnh đề có điều kiện ” bằng cách sử dụng tính năng này để bạn có thể chạy một lệnh gọi lại nhất định khi một điều kiện trở thành đúng.

Ví dụ: Lấy ví dụ về query builder của Laravel khi sử dụng phương thức when, bạn có thể truy vấn các mệnh đề để áp dụng cho truy vấn dựa trên một điều kiện khác như vậy.

$isAdmin = $request->input('is_admin');

$books = DB::table('books')
                ->when($isAdmin, function ($query, $role) {
                    return $query->where('is_pulished', 1);
                })
                ->get();

Như bạn có thể biết, phương thức When chấp nhận hai đối số ở đây. Đối số đầu tiên, thường là giá trị boolean, khi nó đúng, đối số thứ hai là lệnh gọi lại sẽ được thực thi. Nếu sai, nó sẽ không thực hiện việc closure.

Có một phương thức khác được gọi là unless (ngược lại với phương thức When) sẽ thực thi lệnh gọi lại đã cho unless đối số đầu tiên được đưa ra cho phương thức đó là đúng.

Điều tương tự cũng xảy ra với các collections Laravel. Bạn có thể sử dụng các phương thức khi nào và trừ khi trên các bộ sưu tập theo cách tương tự như mình đã mô tả ở trên.

Những phương pháp này thực sự đơn giản nhưng làm cho mã ngắn gọn và dễ đọc hơn.

Vì vậy, điều gì sẽ xảy ra nếu bạn muốn sử dụng loại tiện ích tương tự trong các class tùy chỉnh của riêng mình? Giả sử, trong services của bạn?

Giờ đây đã có một giải pháp tương tự trong Laravel 8.x bằng việc giới thiệu Conditionable trait.

Conditionable trait custom classes

Laravel 8.x giờ đây đã được tích hợp sẵn một trait Illuminate\Support\Traits\Conditionable mà bạn có thể sử dụng trong các class của mình để thêm các phương thức when unless trong các lớp tùy chỉnh của mình.

Giả sử, nếu bạn có một class BookService và bạn muốn sử dụng trait Có điều kiện trong đó, bạn có thể làm như sau:

use Illuminate\Support\Traits\Conditionable;

class BookService
{
    use Conditionable;

    function fetchCategories() {
        //
    }

    function fetchAuthors() {
        //
    }
}

Sau khi được thêm, bạn có thể sử dụng các phương thức when và unless như sau:

$bookService = new BookService;

$bookService = $bookService->when(true, function ($bookService) {
    return $bookService->fetchCategories();
})->fetchAuthors();

$bookService = $bookService->unless(true, function ($bookService) {
    return $bookService->fetchCategories();
})->fetchAuthors();

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