PHP
laravel
Facade

Laravel環境でオリジナル関数クラスをファサードとして登録する

More than 1 year has passed since last update.

1. Facadeファイル群を作ります。

【階層】
laravel/
 └app/
  └MyFacades/
   └Hoge/
    └Hoge.php
     Facades/
      └Hoge.php

app/MyFacades/Hoge/Hoge.php
namespace Hoge;
class Hoge {
    public static function fuga() {
    }
}
app/MyFacades/Hoge/Facades/Hoge.php
namespace Hoge\Facades;
class HogeFacade extends Facade {
    protected static function getFacadeAccessor() {
        return 'hoge';
    }
}

※関数は app/MyFacades/Hoge/Hoge.php のクラス内に static で書いていきます。

2. 独自 Facade 追加用のサービスプロバイダーを作ります。

$ php artisan make:provider MyFacadeServiceProvider

3. ファサードのネームスペースを登録する

public function boot() はさわらずそのまま。
public function register() に追記します。

laravel/app/providers/MyFacadeServiceProvider.php
    public function register() {
        $this->app->bind('hoge', function($app) {
                return new \Hoge\HogeFacade;
            }
        );
    }

4. laravel/composer.json の autoload->files に追加

laravel/composer.json
{
    "autoload": {
        "files": [
            "app/MyFacades/Hoge/Hoge.php"
        ]
    },
    ...

5. composer.json を適用

$ composer dump-autoload

6. laravel/config/app.php に provider とエイリアス(名前空間)を登録

config/app.php
return [
    ...
    'providers' => [
        ...
        App\Providers\MyFacadeServiceProvider::class,
        ...
    ],

    'aliases' => [
        ...
        'Func' => Hoge\Hoge::class,
        ...
    ],
    ...

7. サーバーのパーミッションを変更しておく

$ chmod 777 bootstrap/cache/services.php

以上で、\Func::fuga(); でどこからでも関数が使えるようになります!