Laravelでサービスクラスの用途と使い方
92 回閲覧されました
みなさんこんにちは、jonioです。
今回はサービスクラスについてのメモになります。
メモの内容
下記になります。
- 用途
- 作成方法
- コードの書き方
- 使わない方がいい人
用途
処理を切り出して色々なコントローラーで利用したい時に使います。
私の場合はこういう時に使います。
例えばトップページを表示したいコントローラーがあったとします。
そのコントローラーにモデルがない場合はモデルがテーブルにアクセスするのをコントローラーでしないといけません。
コントローラーでモデルの処理をするのはMVCの役割に反しています。
こんな時にサービスクラスを使います。
作成方法
コマンドがないので手動です。
「Laravelのプロジェクト > app」以下にフォルダを作成します。
フォルダ名を「Services」とします。
その下の階層にサービスクラスを記述するファイルを作成します。
ファイル名を「DataService.php」とします。
コードの書き方
まず下記のコードを書きます。
<?php
namespace App\Services;
class DataService
{
}
そして処理をする為のコードを書きます。
モデルに該当する書き方と同じです。
例えば下記にしたとします。
<?php
namespace App\Services;
use App\Models\Movie;
class DataService
{
public function getMovies()
{
return Movie::where('delete_flag', 0)->get();
}
}
そしてサービスクラスをコントローラーに使う為に下記のコードを書きます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\DataService; //この行を追加
class TopController extends Controller
{
//ここから追加
private $dataService;
public function __construct(DataService $dataService)
{
$this->dataService = $dataService;
}
//ここまで追加
}
サービスクラスを使う為の記述をします。
そしてサービスクラスに書いたメソッドを使う為の記述をします。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\DataService;
class TopController extends Controller
{
private $dataService;
public function __construct(DataService $dataService)
{
$this->dataService = $dataService;
}
public function index() {
$movies = $this->dataService->getMovies(); //←でサービスクラスのメソッドを呼び出している
return view('welcome', compact('movies');
}
}
18行目でサービスクラスのメソッドを呼び出していますが「$this->dataService->サービスクラスのメソッド名」と記述すればいいです。
使わない方がいい人
Laravelを使いたての人です。
コントローラーのコードの10行目〜15行目の意味が分からないと思います。
private $dataService;
public function __construct(DataService $dataService)
{
$this->dataService = $dataService;
}
諸学者は勉強しないといけない内容が多いはずなのでコントローラーにモデルの処理を書いてもいいと思います。