Laravel サービス
目次
メソッドインジェクション
class MyService
{
 public function msg(){
  return 〜;
 }
}
class TestController extends Controller
{
 $myServiceã«ã¯MyServiceã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒè‡ªå‹•çš„ã«DIã•れる
 public function service(MyService $myService){
  $response = [
   'msg' => $myService–>msg,
  ];
  return $response;
}
明示的DI
class TestController extends Controller
{
public function __construct(){
  $this–>myService = app()–>make(MyService::class);
  ↓もå¯
  $this–>myService = app()–>app(MyService::class);
  $this–>myService = app()–>resolve(MyService::class);
  $this–>myService = app()–>makeWith(MyService::class, 連想é…列);
}
 public function service(){
  return $myService–>msg;
}
サービスコンテナã¸ç™»éŒ²
class AppServiceProvider extends ServiceProvider
{
 public function boot()
 {
  app()–>bind(MyService::class, function($app){
   $myService = new MyService();
   $myService–>msg = 'laravel';
   return $myService;
  });
  app()–>singleton(MyService::class, function($app){
   〜
  });
 }
}
class TestController extends Controller
{
  public function __construct(){
    $this–>myService = app()–>make(MyService::class);
  }
 public function service(){  
  return $this–>myService–>msg;
  →laravel
 }
}
class AppServiceProvider extends ServiceProvider
{
 public function boot()
 {
  app()–>resolving(MyService::class, function($obj, $app){
   $obj–>msg = 'laravel';
  });
  app()–>singleton('App\〜\MyServiceInterface', MyService::class);
 }
}
class TestController extends Controller
{
 public function service(MyServiceInterface $myService){  
  return $myService–>msg;
  →laravel
 }
}
サービスプãƒãƒã‚¤ãƒ€åˆ©ç”¨
php artisan make:provider MyServiceProvider
※\app\Providers\MyServiceProvider.php
class MyServiceProvider extends ServiceProvider
{
 public function register()
 {
  $this->app->singleton(MyService::class, function($app){
   $myService = new MyService();
   $myService->msg = 'Laravel';
   return $myService;
  });
 }
 public function boot()
 {
  //
 }
}
※\config\app.php
return [
 〜
 'providers' => [
  〜
  App\Providers\MyServiceProvider::class,
 ],
];
class MyService
{
 public function msg()
 {
  return $this->msg;
 }
}
class MyServiceController extends Controller
{
 public function index(MyService $myservice)
 {
  return $myservice->msg();
  →laravel
 }
}
プãƒãƒã‚¤ãƒ€ä½œæˆ
php artisan make:provider MyServiceProvider
※\app\Providers\MyServiceProvider.php
class MyServiceProvider extends ServiceProvider
{
 public function register()
 {
  $this->app->resolving(MyService::class, function($obj, $app){
   $obj->msg = 'Laravel';
  });
  $this->app->singleton(MyServiceInterface::class, MyService::class);
 }
 public function boot()
 {
 }
}
※\config\app.php
return [
 〜
 'providers' => [
  〜
  App\Providers\MyServiceProvider::class,
 ],
];
interface MyServiceInterface
{
 public function msg();
}
class MyService implements MyServiceInterface
{
 public function msg()
 {
  return $this->msg;
 }
}
class MyServiceController extends Controller
{
 public function index(MyServiceInterface $myservice)
 {
  return $myservice->msg();
  →laravel
 }
}
ファサード利用
ファサードクラス
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
クラスåã¯ã‚µãƒ¼ãƒ“スクラスã¨åŒã˜ã§ã‚ã‚‹å¿…è¦ã¯ãªã„ãŒæ…£ä¾‹çš„ã«åŒã˜ã«ã™ã‚‹
class MyService extends Facade{
 protected static function getFacadeAccessor()
 {
  return 'myServiceFacade';
 }
}
ファサード登録
※\config\app.php
return [
 'aliases' => [
  〜
  'myServiceFacade' => App\App\Facades\MyService::class,
 ],
];
※\app\Providers\MyServiceProvider.php
class MyServiceProvider extends ServiceProvider
{
 public function register()
 {
  $this->app->resolving(MyService::class, function($obj, $app){
   $obj->msg = 'Laravel';
  });
  $this->app->singleton(MyServiceInterface::class, MyService::class);
  ã“ã“ã§bindã™ã‚‹ã‚¯ãƒ©ã‚¹ã¯Facadeクラスã§ãªãサービスクラス
  $this->app->singleton('myServiceFacade', MyService::class);
 }
 public function boot()
 {
 }
}
ファサード利用
use App\Facades\MyService;
class MyServiceController extends Controller
{
 public function index()
 {
  return MyService::msg();
 }
}
newã¨ã®é•ã„
$myService = new MyService(〜) ã¨ã®é•ã„
ãƒ¡ã‚½ãƒƒãƒ‰ã‚¤ãƒ³ã‚¸ã‚§ã‚¯ã‚·ãƒ§ãƒ³ã€æ˜Žç¤ºçš„DIã®å ´åˆã€æ—¢ã«ç”Ÿæˆã•れãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’å–å¾—ã™ã‚‹
※サービスクラスã¯ã‚·ãƒ³ã‚°ãƒ«ãƒˆãƒ³ãƒ‘ターンã§è¨è¨ˆã•れã¦ã„る事ãŒãƒ™ã‚¿ãƒ¼
「デザインパターン Singleton:ãŸã£ãŸï¼‘ã¤ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã€å‚ç…§
éžã‚·ãƒ³ã‚°ãƒ«ãƒˆãƒ³ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’シングルトンã¨ã—ã¦å–å¾—ã™ã‚‹å ´åˆ
app()–>singleton()を利用