Лучшая практика для репозитория Laravel

Я пишу новый проект с laravel 5.1, и я хочу использовать шаблон репозитория, но я не могу понять, каков наилучший способ сделать это.

Я думал о:

public function save(User $user)
{
$user->save();
}

public function find($id)
{
return User::find($id);
}

А потом

$user = new User();
$user->email = '[email protected]';
$userRepo->save($user);

Таким образом, я работаю с моделью как DTOИ это супер легко и удобно, но тогда я буду зависеть от Eloquent.

Так что я думал об использовании массива вместо модели, вот так:

public function save(array $user)
{
User::save($user);
}

public function find($id)
{
return User::find($id)->toArray();
}

Но тогда его будет гораздо менее удобно использовать.

Можете ли вы объяснить мне, как лучше всего использовать репозиторий в Laravel, чтобы я мог легко изменить источник данных в будущем, но все же будет удобно использовать этот шаблон?

1

Решение

Я настроил это следующим образом, используя ваш пример:

<?php namespace Repositories;

use Models\User;

class UserEloquentRespository implements UserInterface {

protected $user;

public function __construct(User $user)
{
$this->user = $user;
}

public function create($input)
{
$this->user->create($input);
}
}

Тогда в моем контроллере

Ларавел 4

<?php namespace Controllers;

use Repositories\UserInterface as User;

class UsersController extends \BaseController {

protected $user;

public function __construct(User $user)
{
$this->user = $user;
}

public function store()
{
$input = \Input::all();

// validation here

// now create your user
$user = $this->user->create($input);

if ($user) {
// redirect or do whatever you do on successful user creations
}

// Here you can do whatever you do if a user wasn't created for whatever reason

}

}

Ларавел 5

<?php namespace App\Http\Controllers;

use Repositories\UserInterface as User;
use App\Http\Requests\UserRequestForm;
use App\Http\Controllers\Controller;

class UsersController extends Controller {

protected $user;

public function __construct(User $user)
{
$this->user = $user;
}

public function store(UserRequestForm $request)
{

// Form request validates in middleware

// now create your user
$user = $this->user->create($request->input());

if ($user) {
// redirect or do whatever you do on successful user creations
}

// Here you can do whatever you do if a user wasn't created for whatever reason

}

}

Наконец, не забудьте связать свой интерфейс с вашим красноречивым хранилищем в качестве поставщика услуг.

    App::bind(
'Repositories\UserRepositoryInterface',
'Repositories\Eloquent\UserEloquentRepository'
);

Теперь, когда вам нужно изменить реализацию, просто измените привязку на новый класс, реализующий ваш интерфейс.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]