Les repositories avec Laravel

    
        -- app
        ---- Repository
        ------ Eloquent
        -------- UserRepository.php
        -------- BaseRepository.php
        ------ UserRepositoryInterface.php
        ------ EloquentRepositoryInterface.php
    
    
        -- app
        ---- Repositories
        ------ Contracts
        -------- UserRepositoryInterface.php
        -------- BaseRepositoryInterface.php
        ------ Eloquent
        -------- UserRepository.php
        -------- BaseRepository.php
    

UserRepositoryInterface.php

    
        
        < ?php // supprimer l'espace
        namespace App\Repositories\Contracts;

        use App\Model\User;
        use Illuminate\Support\Collection;

        interface UserRepositoryInterface
        {
            public function all(): Collection;
        }

        
    

BaseRepositoryInterface.php

    
        namespace App\Repositories\Contracts;
        use Illuminate\Database\Eloquent\Model;
        /**
        * Interface BaseRepositoryInterface
        * @package App\Repositories
        */
        interface BaseRepositoryInterface
        {
            /**
            * @param array $attributes
            * @return Model
            */
            public function create(array $attributes): Model;
            /**
            * @param $id
            * @return Model
            */
            public function find($id): ?Model;
        }
    

BaseRepository.php

    
        < ?php

        namespace App\Repositories\Eloquent;

        use App\Repositories\Contracts\BaseRepositoryInterface;
        use Illuminate\Database\Eloquent\Model;

        class BaseRepository
        //implements BaseRepositoryInterface
        {
            /**
            * @var Model
            */
            protected $model;

            /**
            * BaseRepository constructor.
            *
            * @param Model $model
            */
            public function __construct(Model $model)
            {
                $this->model = $model;
            }

            /**
            * @param array $attributes
            *
            * @return Model
            */
            public function create(array $attributes): Model
            {
                return $this->model->create($attributes);
            }

            /**
            * @param $id
            * @return Model
            */
            public function find($id): ?Model
            {
                return $this->model->find($id);
            }
        }

    

UserRepository.php

    
        < ?php

        namespace App\Repositories\Eloquent;

        use App\Models\User;
        use Illuminate\Support\Collection;
        use App\Repositories\Eloquent\BaseRepository;
        use App\Repositories\Contracts\UserRepositoryInterface;

        class UserRepository extends BaseRepository implements UserRepositoryInterface
        {

            /**
            * UserRepository constructor.
            *
            * @param User $model
            */
            public function __construct(User $model)
            {
                parent::__construct($model);
            }

            /**
            * @return Collection
            */
            public function all(): Collection
            {
                return $this->model->all();
            }
        }


    
    
        php artisan make:provider RepositoryServiceProvider
    
    
        public function register()
        {
            //
            //$this->app->bind(PostRepositoryInterface::class, PostRepository::class);
            $this->app->bind(UserRepositoryInterface::class, UserRepository::class);
        }
    

Dans configapp

    
        App\Providers\RepositoryServiceProvider::class
    

Resultat de all()

$users