laravel facade 사용하기

Updated on

Facade를 잘 사용하지 않지만, 혹시 패키지 만들게 된다면 Facade를 사용하게 될 것 같아서 사용방법을 기록한다.

IDE에서 자동완성이 되야하기 때문에…

EmojiFacade

<?php

namespace App\Services\Emoji\Facades;

use Illuminate\Support\Facades\Facade;

/**
 * @see \App\Services\Emoji\EmojiService
 */
class EmojiFacade extends Facade
{
    protected static function getFacadeAccessor(): string
    {
        return 'emoji';
    }
}

EmojiService

<?php

namespace App\Services\Emoji;

use App\Services\Emoji\Data\EmojiData;

class EmojiService
{
    public function getEmoji(int $id): EmojiData
    {
        return new EmojiData(id: $id);
    }
}

EmojiServiceProvider

<?php

namespace App\Providers;

use App\Services\Emoji\EmojiService;
use Illuminate\Support\ServiceProvider;

class EmojiServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->bind('emoji', static function () {
            return new EmojiService();
        });
    }

    public function boot()
    {
    }
}

config/app.php

    'providers' => [
        /*
         * Application Service Providers...
         */
        App\Providers\EmojiServiceProvider::class,
    ],

    'aliases' => Facade::defaultAliases()->merge([
        'Emoji' => EmojiFacade::class,
    ])->toArray(),

이렇게 등록해주면된다. 그런데 라라벨 11에서는 자동으로 프로바이더가 등록되는거로 알고 있어서,

App\Providers\EmojiServiceProvider::class 를 추가 안해도 될수도 있다.

Emoji::getEmoji(id: 111);

그러면 이렇게 사용할 수 있게 된다.