İçeriğe geç →

LumenFramework’e Repository Pattern ‘ı implement Etmek

Öncelikle RepositoryPattern’ı bilmeyenler için şu yazıdan öğrenebilirsiniz. Bu yazımızda Repository pattern’ı aslında şuanda lumene implemente edeceğim ve lütfen kodların açıklamalarını okuyun.

STRUCTURE

  • App\Repository\Repository.php | Class
  • App\Repository\RepositoryInterface.php | Interface

RepositoryInterface.php

<?php
namespace App\Repository;
use \Illuminate\Database\Eloquent\Model;
interface RepositoryInterface
{
    // Repo pattern modellere uygulanır
    public function __construct(Model $model);

    // tüm verileri çekeceğimiz method
    public function all();

    // bir veri oluşturmak için kullanacağımız method
    public function create(array $data);

    // bir update işlemi yapmak için kullanacağımız method
    public function update(array $data, int $id);

    // delete işlemini gerçekleştireceğimiz method
    public function delete(int $id);

    // bir veri göstereceğimiz method
    public function show(int $id);

}

RepositoryClass.php

<?php
namespace App\Repository;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
// RepoInterface'imizi repository clasımıza implemente ediyoruz
class Repository implements RepositoryInterface
{
    // modeli tutacağımız property
    protected $model;

    // Repository'i oluştururken Construct Injection 'ı kullanıyoruz ve model üzerinden işlemlerimizi gerçekleştiriyoruz
    public function __construct(Model $model)
    {
        $this->model = $model;
    }

    public function all()
    {
        return $this->model->all();
    }

    public function create(array $data)
    {
        return $this->model->create($data);
    }

    public function find(int $id)
    {
        return $this->model->find($id);
    }

    public function findOrFail(int $id)
    {
        return $this->model->findOrFail($id);
    }

    public function update(array $data, int $id)
    {
        $record = $this->findOrFail($id);
        return $record->update($data);
    }

    public function delete(int $id)
    {
         return $this->model->findOrFail($id)->delete();
    }

    public function show(int $id)
    {
        return $this->model->findOrFail($id);
    }

    public function getModel(): Model
    {
        return $this->model;
    }

    public function setModel(Model $model): void
    {
        $this->model = $model;
    }

    public function with(Relation $relation)
    {
        return  $this->model->with($relation);
    }
}

UserController.php

<?php
namespace App\Http\Controllers;

use App\Repository\Repository;
use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    // modelimizi tutacağımız property
    protected $model;

    //constructa hangi modeli kullanacaksanız onu enjecte ediyorsunuz
    public function __construct(User $user)
    {
        // ve repository classını initiliaze ediyoruz.
        $this->model = new Repository($user);
    }

    public function create(Request $request)
    {
        // Gelen Requesti bir dizi filtreden geçiriyoruz
        $this->validate($request,[
            'password' => 'required|max:20',
            'email' => 'required|max:50|email',
       ]);

        //ve repository üzerinden create methoduyla modelin fillable alanları ile yeni bir datayı veritabanına ekliyoruz.
       if (!$this->model->create($request->only($this->model->getModel()->fillable))){
           throw new \Exception('there was an error creating user');
       }

       return response('User created')->setStatusCode(201);
    }

    public function update(Request $request,int $id)
    {
        $this->validate($request,[
            'password' => 'required|max:20',
            'email' => 'required|max:50|email',
        ]);

        if (!$this->model->update($request->only($this->model->getModel()->fillable),$id)){
            throw new \Exception("Update Failed");
        }
        return $this->model->find($id);
    }

    public function delete(int $id)
    {
        $this->model->delete($id);
        return response('User Deleted',200);
    }

    public function showAllUsers()
    {
        return $this->model->all();
    }

    public function showOneUser(int $id)
    {
        return $this->model->findOrFail($id);
    }

}

Kategori: php

Yorumlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir