Posted at

Laravelにサービス層を導入する


はじめに

LaravelでWebサービスを開発していると、最初はいいのですが、Controillerが大量のロジックで埋め尽くされ見通しが悪くなっていきます。

それを改善する為にサービス層を導入します。


1.サービスクラスの作成

今回はappの直下にServiceディレクトリを作成し、PostServiceクラスを作成します。

例としてechohogeメソッドを作成します。


PostService.php

<?php

namespace App\Service;

use Illuminate\Support\Facades\DB;

class PostService
{
public function echoHoge()
{
return 'hoge';
}
}



2.サービスコンテナへ登録する

まずはLaravelのartisanコマンドを使用し、サービスプロバイダを作成します。

php artisan make:provider PostServiceProvider


PostserviceProvider.php

<?php

namespace App\Providers;

use App\Service\PostService;
use Illuminate\Support\ServiceProvider;

class PostServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/

public function register()
{
$this->app->bind('Post',function($app){
return new PostService();
});
}

/**
* Bootstrap services.
*
* @return void
*/

public function boot()
{
//
}
}



3.オートロード設定を行う


app.php

'providers' => [

/*
   省略
*/

App\Providers\PostServiceProvider::class,
],


4.依存性注入を行う

最後にコントローラーのコンストラクタで注入していきます。


PostController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Service\PostService;
use App\Post;

class PostController extends Controller
{

protected $postservice;

//投稿系のサービス層をDIする
public function __construct(PostService $postservice)
{
$this->postservice = $postservice;
}

//一覧表示
public function index()
{
//サービス層のメソッドを使用する
return $this->postservice->echoHoge();
}
}


以上です!!

これでサービス層としてビジネスロジックを書ける場所ができました!