laravel5.2 オリジナルの共通処理や関数ライブラリを作る
namespaceきっておけばどこでも呼べる(はず)んだろうけど、せっかくlaravel5.2使っているので、お作法通りにやってみる。
参考
たぶんこういうこと
app.phpで作成したエイリアスの情報をもとに、ファサードにたどり着くと依存性の注入をする際に必要な文字列をもらえる。 その文字列と合致する情報をサービスコンテナが注入しちゃうとサービスになる。
いろんなとこで使う予定のライブラリ
app/Libs/Util.php
<?php namespace App\Libs; class Util { public static function welcome() { return 'welcome'; } }
サービスプロバイダを作る
php artisan make:provider UtilServiceProvider
得意のartisanで雛形作成。
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class UtilServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { // $this->app->bind( 'util', 'App\Libs\Util' ); } }
この中の $this->app がサービスコンテナにアクセスするオブジェクト。
では、「サービスプロバイダーのregisterメソッドではサービスコンテナへの登録だけを行え」とのこと。 $this->app->bind 以外にも singletonメソッドやinstanceメソッドとかがあるみたい。
サービスプロバイダを登録する
config/app.php
'providers' => [
App\Providers\UtilServiceProvider::class,
]
サービスプロバイダで指定した文字列返すファサードを作る
app/Facades/Util.php
<?php namespace App\Facades; use Illuminate\Support\Facades\Facade; /** * @see \Illuminate\Cache\CacheManager * @see \Illuminate\Cache\Repository */ class Util extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'util'; } }
このサービスをエイリアスで呼べるように登録
config/app.php
'aliases' => [ 'Util' => App\Facades\Util::class, ]
phpstormでnot foundにならないように
php artisan ide-helper:generate
使い方
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use Auth; use Util; class FooController extends Controller { // public function index(Request $request) { $a = Util::welcome(); var_dump($a); } }