【Laravel】facadeの作りかた

Laravelすごい忘れてしまった。。 laravelにはFacadeっていうものをあるけど、その時に残したメモがあったから書いておく。

サービスプロバイダーを作る

php artisan make:provider FileManagementProvider

上記のコマンドでサービスプロバイダーのファイルを生成可能。

<?php 
namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
 
class FileManagementServiceProvider extends ServiceProvider {
    public function boot()
    {
        //
    }
 
    public function register()
    {
        $this->app->bind( 
            'fileManagement',
            'App\Services\FileManagement'
        );
    }
}

registerでlaravelのコンテナに登録する。 その際、どのクラスをどんな名前で登録するのかを記述する。 今回は、App\Services\FileManagementクラスをfileManagementという名前で登録します。

 App\Services\FileManagementクラスを作る

<?php 
namespace App\Services;

class FileManagement {

    public function imageOrText()
    {
    }
}

app/Facadeディレクトリの中に、ファイルを作成する

<?php
namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class FileManagement extends Facade {
    protected static function getFacadeAccessor() {
        return 'fileManagement';
    }
}

ここでさっき書いた名前をreturnします。

providersに追加

app.phpの中のprovidersに作ったproviderクラスを追加。

処理の流れ

providersが読み込まれる

作ったproviderをapp.phpのprovidersに追加しました。 laravelは初期起動時にそれらを全て読み込みます。

今回の例で言えば、以下。

    public function register()
    {
        $this->app->bind(  
            'fileManagement',
            'App\Services\FileManagement'
        );
    }

'App\Services\FileManagement'が呼ばれる。

Viewでファサードを呼び出す

@foreach($allUploadedFiles as $file)

    @if(FileManagement::imageOrText($file->path))
        "画像"
    @else
        "画像じゃないよ"
    @endif

@endforeach