1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel Facade自作

Posted at

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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?