LaravelのFacadeを自作する。
Hoge::fuga()
で'piyo'を返すHogeファザードを作成する。
まずHogeクラスを作成する。
App/Support/Hoge.php
<?php
namespace App\Support;
class Hoge
{
public function fuga() {
return 'piyo';
}
}
そしてHogeクラスを呼び出すファサードを作成。
App/Support/Facades/Hoge.php
<?php
namespace App\Support\Facades;
use Illuminate\Support\Facades\Facade;
class Hoge extends Facade
{
public static function getFacadeAccessor() {
return 'hoge';
}
}
Hogeクラスをサービスコンテナに登録するProviderを作成。
Providerはmakeコマンドを使うことでapp/Provivdersフォルダ以下に雛形が作成されます。
$ php artisan make:provider HogeProvider
Provider created successfully.
app/Providers/HogeProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HogeProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
register関数内でHogeクラスをサービスコンテナに登録し、HogeProviderがLaravelに読み込まれるようにconfig/app.phpに登録します。
app/Providers/HogeProvider.php
public function register()
{
$this->app->singleton('hoge', \App\Support\Hoge::class);
}
config/app.php
'providers' => [
/*
* Laravel Framework Service Providers...
*/
省略
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\HogeProvider::class, //追加
],
これで使えるか確認してみましょう。
HogeFacadeをuseすることでHoge::fuga()
が使えるようになります。
適当なクラス
use App\Support\Facades\Hoge;
echo Hoge::fuga();
出力: piyo
facadeのuseなしにfacadeを使えるようにする
config/app.phpにaliasを指定することでuseなしにfacadeを使うことが可能になります。
config/app.php
'aliases' => [
省略
'View' => Illuminate\Support\Facades\View::class,
'Hoge' => App\Support\Facades\Hoge::class, //追加
],
これで準備okです。\Hoge::fuga()
で呼べるようになります。
ideでコード補完できるようにする
providerを登録しておけばide-helperの自動生成ファイルを元にideコード補完ができるようになります。
$ php artisan ide-helper:generate