指南 Controller Repository Service Model 在 Laravel

Controller- Repository- Service model 的 基本实现指南 Laravel 可帮助您以易于管理和维护的方式组织源代码。 以下是如何实现此结构的具体示例:

Model

您可以在此处定义与数据库交互的属性和方法。 Laravel 提供 Eloquent ORM 机制来处理模型。 例如,让我们 model 为 Posts 表创建一个:

// app/Models/Post.php  
namespace App\Models;  
  
use Illuminate\Database\Eloquent\Model;  
  
class Post extends Model  
{  
    protected $fillable = ['title', 'content'];  
}  

Repository

充当和 之间 repository 的 中介 。 它包含通过. 这有助于将数据库逻辑与数据库逻辑分离 ,并且可以轻松更改或测试数据库逻辑。 Controller Model model controller

// app/Repositories/PostRepository.php  
namespace App\Repositories;  
  
use App\Models\Post;  
  
class PostRepository  
{  
    public function create($data)  
    {  
        return Post::create($data);  
    }  
      
    public function getAll()  
    {  
        return Post::all();  
    }  
      
    // Other similar methods  
}  

Service

包含 service 业务逻辑并与 进行通信 Repository。 将调用 Controller 中的方法来处理 Service 请求并返回相应的数据。 这有助于将业务逻辑与应用程序分离 controller,并使测试和维护变得更加容易。

// app/Services/PostService.php  
namespace App\Services;  
  
use App\Repositories\PostRepository;  
  
class PostService  
{  
    protected $postRepository;  
      
    public function __construct(PostRepository $postRepository)  
    {  
        $this->postRepository = $postRepository;  
    }  
      
    public function createPost($data)  
    {  
        return $this->postRepository->create($data);  
    }  
      
    public function getAllPosts()  
    {  
        return $this->postRepository->getAll();  
    }  
      
    // Other similar methods  
}  

Controller

您 controller 可以在其中处理用户请求、调用方法来 Service 检索或发送数据并将结果返回给用户。

// app/Http/Controllers/PostController.php  
namespace App\Http\Controllers;  
  
use Illuminate\Http\Request;  
use App\Services\PostService;  
  
class PostController extends Controller  
{  
    protected $postService;  
      
    public function __construct(PostService $postService)  
    {  
        $this->postService = $postService;  
    }  
      
    public function create(Request $request)  
    {  
        $data = $request->only(['title', 'content']);  
        $post = $this->postService->createPost($data);  
        // Handle the response  
    }  
      
    public function index()  
    {  
        $posts = $this->postService->getAllPosts();  
        // Handle the response  
    }  
      
    // Other similar methods  
}  

通过应用此结构,您可以有效地管理 Laravel 应用程序的不同部分。 此外,分离业务逻辑、存储逻辑和类之间的通信使您的代码库灵活、可维护和可测试。