Eloquentじゃない人も、Modelじゃなくてもなんでもですが
独自にFacadeを作成することもできます。
ディレクトリもどこでも良いんですが、app下にextensionsを作ったとします。
(composer.jsonに追加してください)
facadeを通じて使いたいものをこんな感じで作るとします。
laravel4の機能を使いたければ適当にuseしてください
namespace Hoge;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config;
class Hoge
{
/**
* @return string
*/
public function getHoge()
{
return get_class();
}
}
続いてServiceProvider, アクセサ
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';
}
}
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に追加します
'providers' => [
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
// ~~~
'Hoge\Provider\HogeServiceProvider',
],
任意のcontrollerからcallしてみましょう。
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みたいなのを作ったりとかするのがいいのではないかと