Help us understand the problem. What is going on with this article?

Facadeをつくる

More than 5 years have passed since last update.

Eloquentじゃない人も、Modelじゃなくてもなんでもですが
独自にFacadeを作成することもできます。
ディレクトリもどこでも良いんですが、app下にextensionsを作ったとします。
(composer.jsonに追加してください)

facadeを通じて使いたいものをこんな感じで作るとします。
laravel4の機能を使いたければ適当にuseしてください

app/extensions/Facades/Hoge/Hoge.php
namespace Hoge;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config;

class Hoge
{  
    /**
     * @return string
     */
    public function getHoge()
    {
        return get_class();
    }
}

続いてServiceProvider, アクセサ

app/extensions/Facades/Hoge/Facades/Hoge.php
namespace Hoge\Facades;

use Illuminate\Support\Facades\Facade;

class Hoge extends Facade 
{

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'hoge';
    }
}
app/extensions/Facades/Hoge/Provider/Hoge.php
namespace Hoge\Provider;

use Illuminate\Support\ServiceProvider;

class HogeServiceProvider extends ServiceProvider 
{

    public function register()
    {
        $this->app->bindShared('hoge', function($app) {
                return new \Hoge\Hoge;
            }
        );
    }
}

composer.jsonをデフォルトの状態で利用している方は、忘れずに実行しましょう。

php composer dump-autoload 
#またはphp composer.phar dump-autoload

providersに追加します

app/config/app.phpまたはapp/config/環境/app.php等
    'providers' => [
        'Illuminate\Foundation\Providers\ArtisanServiceProvider',
        'Illuminate\Auth\AuthServiceProvider',
        'Illuminate\Cache\CacheServiceProvider',
// ~~~
        'Hoge\Provider\HogeServiceProvider',
],

任意のcontrollerからcallしてみましょう。

任意のController.php
Hoge::getHoge();

という具合で簡単に作る事ができます。
Eloquentを使わずにQueryBuilderや、通常のDB::select() 愛用の方、
Database操作以外もmodelsに書く方(modelはDatabase操作専用じゃありませんよ!)は
Controllerからは普通に

protected $hoge;

public function __construct(\Model\Hoge $hoge){
    $this->hoge = $hoge;  
}

// もしくは
public function __construct(){
    $this->hoge = App::make("\Model\Hoge");  
}

で使ってる人が多いんじゃないかと思います。
*Testを考えたらnewするのもちょっとあれですよね
ロジックすべてをmodelsとしている方はFacadesを独自で作るという方はあまり居ないかもしれませんが、
Facadeを通じて使える様にすると、bladeからも使う事ができますので、
Utilみたいなのを作ったりとかするのがいいのではないかと

ytake
著: Laravelリファレンス(インプレス) Laravelエキスパート養成読本(技術評論社) PHPフレームワーク Laravel Webアプリケーション開発 バージョン 5.5 LTS対応(ソシム)
https://blog.ytake.jp.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away