Facade là gì?

Chúng ta có thể hiểu Facade là mặt tiền và mặt trước của một tòa nhà hay bất cứ thứ gì. Tầm quan trọng của Facade là chúng có thể dễ nhận thấy và nổi bật hơn, tương tự như vậy, thì trong Laravel cũng có một khái niệm về Facade. Nhưng chúng ta không phải phát triển một tòa nhà trong Laravel mà chúng ta sẽ quản lý mã nguồn và xây dựng cú pháp dễ nhớ của hàm hoặc lớp thông qua Facade.

Trước khi, chúng ta đi sau hơn về khái niệm Facade trong Laravel, thì điều quan trọng nhất là chúng ta phải hiểu khái niệm hàm không tĩnh và hàm tĩnh trong PHP là gì.

Phương thức static 

Trong phương thức static, chúng ta không cần phải khởi tạo class thì mới có thể sử dụng được các hàm bên trong class đó. Phương thức static, chúng ta sử dụng dấu (::) khi truy cập hàm của một class:

<?php
class Calc {
    const GOLDEN_RATIO = '24.5';
}

echo Calc::GOLDEN_RATIO;

Các từ khóa như seft, staticparent được sử dụng để tham chiếu các thuộc tính hoặc phương thức trong một class.

<?php

class blogs {
    private const name = "ManhDanBlogs";

    public static function name() 
    {
        echo self::name;
    }
}

blogs::name();

Phương thức non-static

Trong phương thức non-static, chúng ta cần phải khởi tạo class thì mới có thể tham chiếu các thuộc tính hoặc phương thức trong một class.

<?php

class blogs {
    public function name($name)
    {
        echo $name;
    }
}

$test = new blogs;
$test->name('ManhDanBlogs');

Sau khi, chúng ta đã xem qua các khái niệm về phương thức staticnon-static, chúng ta sẽ đi sâu hơn về khái niệm Facade trong Laravel.

Laravel Facades

Facade cung cấp phương thức "static" để tương tác các class được khai báo bên trong service container. Laravel Facade service giống như "static proxies" cho các class bên dưới service container. Nó giúp cú pháp ngắn gọn, dễ hiểu hơn so với phương thức static truyền thống.

Ví dụ : Cache::get('key'); hay Publisher::publish($this); là những Facade.

Tới đây, chúng ta còn chần chừ gì nữa, mà không tiến hành xây dựng một Facade trong Laravel cho riêng mình.

Đầu tiên, chúng ta sẽ tạo một thư mục tên là Services trong thư mục app (tức là app/Services) trong project Laravel của bạn.

Bên trong thư mục này, chúng ta sẽ tạo một file PHP có tên là CustomServices. Bạn hãy mở file và chỉnh sửa như sau:

<?php
 
namespace App\Services;
 
class CustomServices {
    public function getVerificationCode($min = 10000, $max=99999)
    {
        return rand($min, $max);
    }
}

Tiếp theo, chúng ta sẽ đăng kí CustomServices trong service provider.

Bạn có thể tạo một service provider mới hoặc chỉ cần thêm CustomServices vào app/Providers/AppServiceProvider.php

public function register()
{
    $this->app->singleton('CustomServicesAlias', function ($app) {
        return new \App\Services\CustomServices;
    });
}

Bây giờ, chúng ta sẽ tạo một thư mục có tên là Facades trong thư mục app (tức là app/Facades) trong project Laravel của bạn.

Bên trong thư mục này, chúng ta sẽ tạo một file PHP có tên là CustomServicesFacade. Bạn hãy mở file và chỉnh sửa như sau:

<?php
 
namespace App\Facades;
 
use Illuminate\Support\Facades\Facade;
 
class CustomServicesFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'CustomServicesAlias';
    }
}

Tiếp theo, chúng ta sẽ đăng kí alias cho CustomServicesFacade trong config/app.php. Bạn hãy mở file config/app.php và thêm CustomServicesFacade trong array aliases.

'aliases' => [
    ...
    'CustomServicesFacade' => App\Facades\CustomServicesFacade::class
],

Bây giờ, bạn đã sẵn sàng để sử dụng Custom Facade trong suốt project Laravel của bạn rồi. Với một ví dụ đơn giản trên, chúng ta đã thêm một đoạn mã nguồn của controller bằng cách sử dụng phương thức getVerificationCode thông qua CustomServicesFacade.

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use CustomServicesFacade;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function getVerificationCode(Request $request)
    {
       $verificationCode = CustomServicesFacade::getVerificationCode();
       return $verificationCode;
    }
}

Tôi hy vọng bạn thích hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.

CÓ THỂ BẠN QUAN TÂM

Laravel One to Many Polymorphic Relationship

Laravel One to Many Polymorphic Relationship

One to Many Polymorphic Model Relationship được sử dụng khi một model thuộc về nhiều model khác trên một model kết hợp duy nhất. Ví dụ: Nếu chúng ta có bảng post và video, cả hai đều cần thêm hệ thống...

Integrating OpenAI in Laravel

Integrating OpenAI in Laravel

OpenAI OpenAI là một phòng thí nghiệm nghiên cứu trí tuệ nhân tạo (AI) của Mỹ bao gồm tổ chức phi lợi nhuận OpenAI Incorporated (OpenAI Inc.) và công ty con hoạt động vì lợi nhuận OpenAI Limited Par...

Method WhereAny / WhereAll  in Laravel Eloquent

Method WhereAny / WhereAll in Laravel Eloquent

New Laravel 10: Eloquent WhereAny() và WhereAll() Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ li...

Laravel Artisan Console

Laravel Artisan Console

Ngoài các lệnh command mặc định của Laravel được cung cấp bởi Artisan, có rất nhiều tác vụ trong ứng dụng Laravel của bạn có thể được xử lý rất tốt bằng các lệnh command này. Nhưng đôi khi có nhiều tá...

Laravel Queues and Jobs

Laravel Queues and Jobs

Các công ty có thẻ gặp khó khăn trong việc quản lý các dịch vụ hoặc ứng dụng của họ. Ví dụ, các công ty các thực hiện gửi email cho hàng triệu người dùng hoặc thực hiện sao lưu dữ liệu. Tất cả các hoạ...

Defer in Laravel: Push Tasks to the Background

Defer in Laravel: Push Tasks to the Background

Deferred Functions trong Laravel Các phiên bản Laravel trước version 11, chúng ta thường sử dụng Queued Jobs cho phép thực hiện sắp xếp các tác vụ xử lý background . Nhưng đôi khi có những tác v...

Document Laravel API With OpenAPI (Swagger)

Document Laravel API With OpenAPI (Swagger)

Swagger là gì? Swagger là một Ngôn ngữ mô tả giao diện để mô tả các API RESTful được thể hiện bằng JSON. Swagger được sử dụng cùng với một bộ công cụ phần mềm mã nguồn mở để thiết kế, xây dựng, l...

How to Install Laravel on CentOS 6/7

How to Install Laravel on CentOS 6/7

Laravel là một PHP Framework mã nguồn mở miễn phí, được phát triển bởi Taylor Otwell với phiên bản đầu tiên được ra mắt vào 6/2011. Laravel ra đời nhằm mục đích phát triển ứng dụng web dựa trên mô hìn...

Laravel Model

Laravel Model

Model là gì? Trong mô hình MVC, chữ “M” viết tắt là Model, Model dùng để xử lý logic nghiệp vụ trong bất kì ứng dụng dựa trên mô hình MVC. Trong Laravel, Model là lớp đại diện cho cấu trúc logic và...

ManhDanBlogs