Generic repository implementation for Laravel
, (*1)
Installation
Add to your composer.json following lines, (*2)
"require": {
"ipunkt/laravel-repositories": "~2.0"
}
Usage
Repository Interfaces
Simply extend your interfaces by the provided interface Ipunkt\LaravelRepositories\Contracts\RepositoryInterface., (*3)
Example
use Ipunkt\LaravelRepositories\Contracts\RepositoryInterface;
interface HolidayRepository extends RepositoryInterface
{
public function allByUser(User $user);
}
Repository Classes
Simply extend your repository class by the provided Ipunkt\LaravelRepositories\EloquentRepository. It is an abstract class., (*4)
You need to have your own constructor which sets the internal property model to the appropriate model this repository will work on., (*5)
Example
use Ipunkt\LaravelRepositories\EloquentRepository;
class EloquentHolidayRepository extends EloquentRepository implements HolidayRepository
{
/**
* @param Holiday $holiday eloquent model
*/
public function __construct(Holiday $holiday)
{
$this->model = $holiday;
}
/** implementing all methods in HolidayRepository */
}
Registering with an Service Provider
You should register all repository stuff with a service provider to use it for example in a controller., (*6)
Example
class RepositoryServiceProvider extends ServiceProvider
{
public function register()
{
// binding interface HolidayRepository to the concrete implementation of EloquentHolidayRepository
$this->app->bind(
'HolidayRepository',
function () {
return new EloquentHolidayRepository(new Holiday());
}
);
}
}
class HolidayController extends Controller
{
private $repo;
public function __construct(HolidayRepository $holidayRepository)
{
$this->repo = $holidayRepository;
}
}
API Documentation
Please look at the Ipunkt\LaravelRepositories\Contracts\RepositoryInterface for the current existing methods., (*7)