23
21

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.

Facadeをつくる

Last updated at Posted at 2013-12-08

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みたいなのを作ったりとかするのがいいのではないかと

23
21
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
23
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?