tohokuaikiのチラシの裏

技術的ネタとか。

俺的な静的Facadeの作り方

LaravelでオレオレUtililyクラスを使いたいと思った。Staticメソッドを自分が使う分だけのもの。

で、Facadeを使うと良いかなと思って、LaravelのFacadeを作り方を調べたんだけど、なんか、ServiceProviderを登録したりFacadeクラスと実行クラスを分けたりとかなんだりかんだりとややこしそうだった。

参考にしたのはこのあたり。 LaravelのFacade(ファサード)でオリジナルの処理クラスを定義する入門編
【Laravel 5.4】ファサード の作り方(でも多用は良くない) - Qiita LaravelのFacadeの作り方 - Qiita

で、結局これだけでいいじゃんっていうのが以下。

Laravelバージョン

Laravel Framework 6.18.26

Facade敬称クラスを作る

app/Facades/ITTUtil.php

<?php
namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class ITTUtil extends Facade
{
    const FACADE_BIND_KEY = 'ittutil';

    protected static function getFacadeAccessor() {
        return self::FACADE_BIND_KEY;
    }

    /**
     * @return array List of Japanese Prefectures.
     */
    public static function pref()
    {
        return [
            1 => '北海道', 2 => '青森県', 3 => '岩手県', 4 => '宮城県',
        ];
    }
}

ServiceProviderに登録(これ、不要だった)

なんか、参考記事ではServiceProviderを新しく作って…ってやってたけど、AppServiceProviderがあるのでこれ使えばいいんじゃないか?と思って app/Providers/AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(
            'ittutil'
        );
    }

で、次にconfig/app.phpに登録

config/app.php

<?php

    'aliases' => [

        'ITTUtil' => App\Facades\ITTUtil::class,

なんか、これだけでイケた。

たぶん、DIとか使わなければいけるんだろう。