Guide till Controller Repository Service Model in Laravel

Den grundläggande implementeringsguiden för Controller- Repository- Service model in Laravel hjälper dig att organisera din källkod på ett sätt som är lätt att hantera och underhålla. Här är ett konkret exempel på hur du kan implementera denna struktur:

Model

Det är här du definierar attributen och metoderna för att interagera med databasen. Laravel tillhandahåller Eloquent ORM-mekanismen för att arbeta med modeller. Låt oss till exempel skapa en model för Posts tabellen:

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

Repository

Den repository fungerar som en mellanhand mellan Controller och Model. Den innehåller metoder för att utföra databasoperationer genom model. Detta hjälper till att separera databaslogiken från controller och gör det enkelt att ändra eller testa databaslogiken.

// 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

Den service innehåller affärslogik och kommunicerar med Repository. De Controller kommer att anropa metoder från Service för att hantera förfrågningar och returnera motsvarande data. Detta hjälper till att skilja affärslogiken från controller och gör testning och underhåll enklare.

// 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

Det controller är där du hanterar användarförfrågningar, anropsmetoder från för att Service hämta eller skicka data och returnera resultat till användaren.

// 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  
}  

Genom att tillämpa denna struktur kan du effektivt hantera olika delar av din Laravel applikation. Att separera affärslogik, lagringslogik och kommunikation mellan klasser gör dessutom din kodbas flexibel, underhållsbar och testbar.