Tự tạo Facade trong Laravel (ok)

https://giaphiep.com/blog/tu-tao-facade-trong-laravel-14987

Tự tạo Facade trong Laravel

FacadeLaravel

Giới thiệu

Facades cung cấp cách gọi static cho các class được khai báo trong service container. Laravel Facade cho phép sử dụng cú pháp vừa ngắn gọn vừa dễ bảo trì hơn so với việc sử dụng các phương thức static truyền thống. Nếu bạn nào còn chưa hiểu rõ về Laravel Facade, thì có thể tìm hiểu qua bài viết này để biết rõ hơn Facade là gì? Facade hoạt động thế nào? Chắc hẳn bạn nào code Laravel nhiều đã từng sử dụng những câu lệnh như này rồi: Auth::check();, Log::info("Hello");. Đó chính là Facade! Bạn có thấy việc gọi & sử dụng nó thật đơn giản như việc gọi 1 hàm static đúng không nào? Nhưng đó là việc bạn sử dụng lại Facade đã được tạo trong Laravel. Vậy, có khi nào bạn cần phải tự tạo Facade riêng cho dự án của mình thì sao? Hôm nay, mình sẽ giới thiệu làm thế nào để tự tạo Facade trong Laravel.

Các bước thực hiện

Sau đây là các bước để tạo Facade trong Laravel.

  1. Tạo PHP Class File.

  2. Bind class đó vào Service Provider.

  3. Đăng ký Service Provider vào providers trong file config\app.php.

  4. Tạo class extends từ lluminate\Support\Facades\Facade.

  5. Đăng ký class ở bước 4 vào aliases trong file config\app.php.

Tham khảo Facade Class

Thực hiện

  1. Tạo mới 1 service provider có tên DemoServiceProvider theo command dưới đây (tên các bạn có thể tự tạo):

php artisan make:provider DemoServiceProvider
<?php
namespace App\Demo;

class Demo 
{
   public function helloWorld()
   {
      echo "Hello World!";
   }
}
  1. Tạo Facade DemoFacade.php trong folder App/Demo/Facade App/Demo/Facade/Demo.php

<?php
namespace App\Demo\Facade;

use Illuminate\Support\Facades\Facade;

class DemoFacade extends Facade
{
    protected static function getFacadeAccessor()
    { 
        return 'demo';
    }
}
  1. Thực hiện binding. Sửa file DemoServiceProvider đã tạo ở bước 1

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Demo\Demo;

class DemoServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('demo', function () {
            return new Demo();
        });
    }
}
  1. Thêm service provider trong file config/app.php.

providers

App\Providers\DemoServiceProvider::class

aliases

'Demo' => App\Demo\Facade\DemoFacade::class
  1. Thêm routes: routes/web.php

Route::get('demo', 'DemoController@testFacade');
  1. Tạo file DemoController.php:

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Demo;

class DemoController extends Controller
{
    public function testFacade()
    {
        echo Demo::helloWorld();
    }
}

Tài liệu tham khảo

https://laravel.com/docs/5.5/providers https://laravel.com/docs/5.5/facades https://viblo.asia/p/laravel-beauty-tim-hieu-ve-facade-znVGLYLbvZOe https://www.tutorialspoint.com/laravel/laravel_facades.htm

Last updated