آموزش ایجاد Facades شخصی  در لاراول

آموزش ایجاد Facades شخصی در لاراول

فساد ها (Facades) یک رابط استاتیک برای کلاس (سرویس ها) ایجاد می کنند تا دسترسی به اون شی  از سمت service container فراهم بشه. در لاراول فساد های زیادی وجود دارد که با استفاده از آن ها و بدون اطلاع از ساختار آنها می توانیم برنامه نویسی خود را خیلی بهتر و جذاب تر کنیم. در این مطلب ما قصد داریم درلاراول یک فساد دلخواه برای خود ایجاد نماییم. البته شما می توانید فساد های متعدد ایجاد کنید و از آن ها در پروژه ها یا پکیج های خود استفاده نمایید.

همانطور که می دانید در لاراول فساد های زیادی وجود دارد که با استفاده از آن ها و بدون اطلاع از ساختار آنها می توانیم برنامه نویسی خود را خیلی بهتر و جذاب تر کنیم.

اما فساد چیست؟

فساد ها (Facades) یک رابط استاتیک برای کلاس (سرویس ها) ایجاد می کنند تا دسترسی به اون شی  از سمت service container فراهم بشه. بطور ساده تر facade  یک رابط کاربری یا interface از نوع static ایجاد میکنند که دسترسی به کلاس های موجود در service container را فراهم میکند.

برای نمونه ما می تونیم با استفاده از متد getFacadeAccessor برای یک کلاس فساد تعریف کنیم٫

در این مطلب ما قصد داریم درلاراول یک فساد دلخواه برای خود ایجاد نماییم. البته شما می توانید فساد های متعدد ایجاد کنید و از آن ها در پروژه ها یا پکیج های خود استفاده نمایید.

ما مراحل زیر را انجام خواهیم داد:

۱− ایجاد یک کلاس php

2- Bind کردن یا پیوست دادن کلاس به Service Provider

3- register کردن سرویس در Config\app.php

4- ایجاد کلاسی که از  Illuminate\Support\Facades\Facade ارث بری کند

5- register کردن کلاس در Config\app.php

 

1- یک پوشه بنام MyClass ایجاد و درون آن کلاس بنام MyFecade ایجاد نمایید و کد زیر را در آن قرار دهید:

namespace App\MyClass;

class MyFacade
{
    public function sayHello()
    {
        echo "Hello, from Facade class.";
    }
}

 

2-  حال باید کلاس خود را به یک سرویس پرووایدر bind کنیم. برای اینکار با استفاده از دستور زیر در خط فرمان یک کلاس Service Provider ایجاد خواهیم کرد:

php artisan make:provider MyFacadeServiceProvider

حال در متد کلاس ایجاد شده کد زیر را قرار دهید:

$this->app->bind('myfacade',function(){

        return new MyFacade();

});

در نهایت فایل شما باید بصورت زیر باشد:

namespace App\Providers;

use App\MyFacade;

use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;

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

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('myfacade',function(){

        return new MyFacade();

        });
    }
}

 

3- register کردن service provider ایجاد شده در config\app.php

به فایل app.php موجود در دایرکتوری config رفته و در آرایه مربوط به providers کد زیر را قرار  دهید:

    App\Providers\LarashoutServiceProvider::class,

 

4- حال یک کلاس بنام MyFacadeFacade در دایرکتوری App\MyClass ایجاد کنید.  کلاس ایجاد شده را از کلاس Illuminate\Support\Facades\Facade ارث بری کند.

کلاس ما باید بصورت زیر باشد:

namespace App\MyClass;

use Illuminate\Support\Facades\Facade;

class MyFacadeFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'PishroApp';
    }
}

 

5- حال باید کلاس ایجاد شده در مرحله قبل را در فایل config\app.php ثبت کنیم. برای اینکار به فایل config\app.php رفته و در آرایه aliases کد زیر را قرار دهید:

'MyFacade'   =>  App\MyClass\MyFacadeFacade::class

 

به همین راحتی شما برای خود یک فساد ایجاد کرده اید و می توانید در بخش های مختلف پروژه از این فساد استفاده کرده و لذت ببرید! :) 

می توانید برای تست نیز به فایل web.php پروژه لاراول خود رفته و کد زیر را در آن قرار دهید و آدرس مربوطه را فراخونی کنید:

Route::get('/pishroapp', function() {

    MyFacade::sayHello();

});

 

با فراخوانی روت localhost:8000/pishroapp  خروجی تابع sayHello برای شما نمایش داده خواهد شد.

 

امیدوارم از این آموزش نهایت لذت رو برده باشید. درصورتی که سوالی یا مشکلی بود از بخش نظرات برای ما بفرستید. خوشحال می شیم:)


دسته بندی ها:

لاراول

ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
هنوز برای این مطلب نظری ارسال نشده است!