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

Integrating CKFinder into CKEditor 5 in Laravel 11

Integrating CKFinder into CKEditor 5 in Laravel 11

CKEditor 5 CKEditor 5 là một trình soạn thảo văn bản phong phú JavaScript với nhiều tính năng và khả năng tùy chỉnh. CKEditor 5 có kiến trúc MVC hiện đại, mô hình dữ liệu tùy chỉnh và DOM ảo, mang...

Laravel Routing

Laravel Routing

Route là gì? Đúng như tên gọi của nó, Route thực hiện chức năng định tuyến, dẫn đường cho các HTTP request gửi đến đúng nơi mà ta mong muốn. Với sự phát triển mạnh mẽ của ứng dụng web ngày nay, việc...

Cloudflare's Turnstile CAPTCHA in Laravel

Cloudflare's Turnstile CAPTCHA in Laravel

Ngày 28/09/2022, Cloudflare đã thông báo về phiên bản beta mở của Turnstile, một giải pháp thay thế vô hình cho CAPTCHA. Bất kỳ ai, ở bất kỳ đâu trên Internet muốn thay thế CAPTCHA trên trang web c...

Laravel  Scout Full Text Search with Algolia

Laravel Scout Full Text Search with Algolia

Laravel Scout cung cấp một giải pháp đơn giản, dựa trên trình điều khiển để thêm tìm kiếm Full Text vào các mô hình Eloquent của bạn. Khi sử dụng Eloquent, Scout sẽ tự động giữ chỉ mục tìm kiếm của bạ...

How to insert into a database at lightning speed?

How to insert into a database at lightning speed?

Trong quá trình thực hiện dự án cho công ty, một trong những yêu cầu đặt ra là import dữ liệu từ file CSV (chứa dữ liệu từ hệ thống cũ) vào cơ sở dữ liệu MySQL của hệ thống mới. Do sự thay đổi cấu...

Laravel UI Password Reset Expired

Laravel UI Password Reset Expired

Trong thư viện laravel/ui, thì chức năng password reset dù cho token có hết hạn thì vẫn có truy cập vào trang password reset, đến khi bạn submit form thì mới thông báo là token đã hết hạn. Nhưng có mộ...

Laravel CKEditor 5 Image Upload

Laravel CKEditor 5 Image Upload

CKEditor 5CKEditor 5 là một trình soạn thảo văn bản phong phú JavaScript với nhiều tính năng và khả năng tùy chỉnh. CKEditor 5 có kiến trúc MVC hiện đại, mô hình dữ liệu tùy chỉnh và DOM ảo, mang...

Laravel Socialite Login With Google

Laravel Socialite Login With Google

Google Google là một công cụ tìm kiếm trên internet. Nó sử dụng một thuật toán độc quyền được thiết kế để truy xuất và sắp xếp các kết quả tìm kiếm nhằm cung cấp các nguồn dữ liệu đáng tin cậy và ph...

Integrating Google Gemini AI in Laravel

Integrating Google Gemini AI in Laravel

Google Gemini Gemini là một mô hình trí tuệ nhân tạo mới mạnh mẽ từ Google không chỉ có khả năng hiểu văn bản mà còn có thể hiểu cả hình ảnh, video và âm thanh. Gemini là một mô hình đa phương ti...

ManhDanBlogs