「Php/laravel/laravel5/DI」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→App::Make()) |
(→複数サービスコンテナをApp::make()で追加する場合のサンプル) |
||
行62: | 行62: | ||
==複数サービスコンテナをApp::make()で追加する場合のサンプル== | ==複数サービスコンテナをApp::make()で追加する場合のサンプル== | ||
− | - | + | -app/Provider/AppServiceProvider.php |
class AppServiceProvider extends ServiceProvider | class AppServiceProvider extends ServiceProvider | ||
{ | { | ||
行75: | 行75: | ||
} | } | ||
} | } | ||
− | - | + | -app/Controller/IocController.php |
namespace App\Http\Controllers; | namespace App\Http\Controllers; | ||
use Illuminate\Http\Request; | use Illuminate\Http\Request; |
2017年9月10日 (日) 01:48時点における版
目次
IoCとは
Inversion of Control(制御反転)
Laravelで使えるクラス間の依存を管理する管理ツールです。
PHPのDIについてはこちらを参考
php/pimple [ショートカット]]
Laravelには3種類方法がある
- App::make()
- Constructor Injection
- Method Injection (Laravel5から追加)
App::Make()
-app/Providers/AppServiceProvider.php
namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\Service; class AppServiceProvider extends ServiceProvider { public function register() { $this->app->bind('Service', function ($app) { return new Service(); }); } }
-app/Controller/IocController.php
use App\Http\Controllers\Controller; use App\Services\Service; class IocController extends Controller { public function index() { $service = app('Service'); echo $service->doSomething(); } }
Constructor Injection
Constructで記述すれば勝手にinstanceを生成してくれる
use App\Services\Service; class IocController extends Controller { public function __construct(Service $service) { echo $service->doSomething(); } }
Method Injection
Methodで記述すれば勝手にinstanceを生成してくれる
use App\Services\Service; class IocController extends Controller { public function index(Service $service) { echo $service->doSomething(); } }
複数サービスコンテナをApp::make()で追加する場合のサンプル
-app/Provider/AppServiceProvider.php
class AppServiceProvider extends ServiceProvider { public function register() { $this->app->bind('Service', function ($app) { return new Service(); }); $this->app->bind('Client', function ($app) { return new Client($app->make('Service')); }); } }
-app/Controller/IocController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use App\Services\Client; class IocController extends Controller { public function index() { $client = app('Client'); echo $client->doSomething(); } }