📌

【Laravel】ビジネスロジックとコントローラーを分ける

2021/06/07に公開

概要

・LaravelでControllerに処理を直接記載するのはどのようなプロジェクトでも推奨されない
・あくまでもサービスクラスは個別に階層を分けて記載するべき
・Controller、Model、Serviceそれぞれのクラスを作成済みであることが前提

サービス階層の用意

app階層に「Service」フォルダを作成する
 ※mkdirコマンド、エディタで手動作成どちらでも良い

Modelを絡ませない場合(コード値を取りたい時など)

Serviceクラスで宣言した値を、Controllerで取得して、Viewに渡す

Service

<?php

namespace App\Services;

class TestService
{
    // クラス内に関数を作成して、これを呼び出すようにする
    public function hoge()
    {
        echo 'テスト';
    }
}


Controller

class TestController extends Controller
{
    /**
     * サービスクラスからの値取得テスト
     * 初期値を「テスト」で渡す
     */
    public function __construct(TestService $test_service)
    {
        $this->hoge = $test_service;
    }

    public function test(TestService $test_service)
    {
        $test_service->hoge();
	
        return view('test.test', compact('test_service'));
    }
}

View(テンプレートはblade)
<!doctype html>

<div>
	{{$hoge}}
</div>

ルーティング
use App\Http\Controllers\Test\TestController;
/**
 * テスト機能:テスト画面
 * 初期表示
 */
Route::get('/test/test', [TestController::class, 'test']);

Modelを絡ませる場合(DBの値を取りたい時など)

今度書く

Discussion