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