LoginSignup
13
8

More than 3 years have passed since last update.

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

Posted at

はじめに

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();
    }
}

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

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8