Laravel 設計模式:Repository + Service 實戰

laradocs 發表於 2021-11-22
Laravel 設計模式

前期準備

Repository

app/Repositories/UserRepository.php

<?php

namespace App\Repositories;

interface UserRepository
{
    public function create ( $attributes );
}

app/Repositories/Eloquent/Users.php

<?php

namespace App\Repositories\Eloquent;

use App\Models\User;
use App\Repositories\UserRepository;

class Users implements UserRepository
{
    protected $user;

    public function __construct ( User $user )
    {
        $this->user = $user;
    }

    public function create ( $attributes )
    {
        $user = $this->user->create ( $attributes );

        return $user;
    }
}

接下來,我們要把 UserRepository 和 Users 繫結到服務提供者:

我們可以使用以下命令快速生成服務提供者:

php artisan make:provider RepositoryServiceProvider

執行後您將會在 app/Providers 資料夾下看見 RepositoryServiceProvider.php 檔案。

繫結類

現在,我們要在 RepositoryServiceProvider.php 檔案中繫結 UserRepository 和 Users 類:

public function register()
{
    $this->app->bind (
        'App\Repositories\UserRepository',
        'App\Repositories\Eloquent\Users'
    );
}

最後,我們把 RepositoryServiceProvider 類新增到 config/app.php 檔案中:

config/app.php

return [
    .
    .
    .
    'providers' => [
        .
        .
        .
        App\Providers\RepositoryServiceProvider::class,
    ],
    .
    .
    .
]

相關連結:部落格:使用 Repository 設計模式封裝通用的 CURD 操作

Service

app/Services/UserService.php

<?php

namespace App\Services;

use App\Repositories\UserRepository;
use Illuminate\Auth\Events\Registered;

class UserService
{
    protected $users;

    public function __construct ( UserRepository $users )
    {
        $this->users = $users;
    }

    public function createUser ( $request )
    {
        $user = $this->users->create($request->all());
        event ( new Registered($user) );

        return $user;
    }
}

您也可以根據您的實際情況進行更改。

快速開始

我們可以執行以下命令快速生成控制器:

php artisan make:controller RegisterController

您將在 app/Http/Controllers 資料夾下看見 RegisterController.php 檔案。

接下來,我們在 RegisterController.php 檔案中新增以下內容:

app/Http/Controllers/RegisterController.php

<?php

namespace App\Http\Controllers;

use App\Http\Resources\UserResouce;
use App\Services\UserService;
use Illuminate\Http\Request;

class RegisterController extends Controller
{
    public function store ( Request $request, UserService $service )
    {
        $user = $service->createUser($request);

        return new UserResouce($user);
    }
}

執行以下命令快速生成 UserResouce 類:

php artisan make:resource UserResource

最後,把 RegisterController 新增到路由,如下所示:

routes/api.php

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::post ( 'register', '[email protected]' );

測試環節

在測試開始之前,我們要先檢查細節:

  • app/Providers/RouteServiceProvider.php 檔案中的第 29 行是否取消註釋
  • .env 檔案中的資料庫配置是否正確

遷移資料庫

如果要遷移資料庫,您可以執行以下命令:

php artisan migrate

使用者註冊

我這裡用 postman模擬使用者註冊,您也可以選擇您熟悉的軟體。

引數 說明
name 名稱
email 郵箱
password 密碼

Laravel 設計模式:Repository + Service 專案實戰

總結

您可以根據您的實際情況進行增加/更改/刪除。

如果想要做到更好,您可以稍加改進。

發揮的想象力,讓您的程式程式碼變得更簡潔、更優雅。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
站在巨人的肩上。