Laravelでserviceクラスを作るにはどうすればいいんだろう…?
こんな疑問を解決します。
Laravelでserviceクラスを作る最大のメリットは、コントローラーに書いていたちょっと複雑なロジックをサービスに書くことでコントローラーの記述量を減らせる点です。
ロジックを分離させることができるので、コードも読みやすくなり効率的になります。
この記事では、serviceクラスの作成手順を紹介していくので参考にしてくださいね!
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
動作環境
Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール phpmyadmin
Laravelでserviceクラスを作る流れ
app配下にapp/Servicesを作る
【手順1】servicesファイルを手動で作成する
Laravelではモデルなどのphp artisan make:model のように今のところservicesクラスをコマンドで作成する方法はないみたいなので、手動で作成します。
Servicesが作れたら、適当に〇〇.phpを作成しておきます。
ちなみに今回は、ログの表示ができるか調べてみるので、logServeivce.phpを以下のようにしました。
<?php
namespace App\Services;
use Illuminate\Support\Facades\Log;
/**
* ログ関連サービス
*/
class LogService
{
// ログの表示
public function log($view, $result)
{
$output = '出力画面: '.$view.', 結果: '.$result;
Log::info($output);
}
}
【手順2】コントローラーでserviceクラスを呼び出す
serviceクラスを作成したので、コントローラーで呼び出します。
<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Book;
use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Services\logService;←追加
class BookController extends Controller
{
private $log;
public function __construct()
{
$this->book = new Book();
$this->category = new Category();
$this->log = new LogService();
}
/**
* 一覧画面
*/
public function index()
{
// 画面ログ
$this->log->log('本の一覧画面', '表示成功');
// 本の一覧データを取得
$books = $this->book->findAllBooks();
return view('book.index', compact('books'));
}
コントローラーの冒頭にuse App\Services\logService;を追加することで、serviceで定義した内容を使用できます。
constructの中にthisとか書いてありますが、ここら辺の理解がまだない人は以下の記事を読むことをおすすめします。
サービスクラスのlogService.phpのlogメソッドが呼ばれて、ログが表示できることが確認できます。
[2021-10-23 11:54:19] local.INFO: 出力画面: 本の一覧画面, 結果: 表示成功
Laravelでログがいまいちよくわからない….って人は以下の記事がおすすめです。
【まとめ】Laravelでserviceクラスを作る手順
今回は、Laravelでserviceクラスを作成する手順を解説しました。
servicesクラスに定義することで、コントローラーにロジックを書くことも少なくなるのでぜひ活用してくださいね!
このブログでは、他にも実務に役立つLaravelの記事を書いているので、ぜひ参考にしてください。
休日で空いた時間の暇つぶしを探せるアプリを公開しています。
コメント