はじめに
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();
}
}
以上です!!
これでサービス層としてビジネスロジックを書ける場所ができました!