Имеем только устанoвленный slim3 (+doctrine).
дописываем: в контроллеры инжектятся сервисы, в сервисы инжектятся репозитории.
правильно я себе представляю DI?
//... dependencies.php
$container[Services\PostService::class] = function ($c) {
$postRepo = $c->get('em')->getRepository('Entities\Post');
return new Services\PostService($postRepo);
};
$container[Controllers\PostController::class] = function ($c) {
$postService = $c->get('Services\PostService');
return new Controllers\PostController($postService);
};
//... routes.php
$app->get('/posts', 'Controllers\PostController:getAll');
//... PostController.php
namespace Controllers;
use Services\CourierService;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class PostController extends Controller
{
protected $postService;
public function __construct(PostService $postService)
{
$this->postService = $postService;
}
public function getAll(ServerRequestInterface $request, ResponseInterface $response)
{
try {
$post = $this->postService->getAll();
return $this->respondWithData($response, $$post, 200);
} catch (\Exception $e) {
return $this->respondWithData($response, [], 400, $e->getMessage());
}
}
}
//...PostService.php
namespace Services;
use Entities\Post;
use Controllers\Controller;
use Repositories\PostRepository;
class PostService extends Service
{
protected $postRepo;
public function __construct(PostRepository $postRepo)
{
$this->postRepo = $postRepo;
}
public function getAll()
{
return $this->postRepo->findAll();
}
}
теперь надо разделить права пользователей. например админ видит все посты, писатель только свои.
и так далее будет: админ видит все рассказы, писатель только свои. городить проверку прав в сервисе и выдавать только нужные данные мне кажется глупо
я вижу идею в том чтобы у админа был свой сервис, у писателя свой:
WriterPostService extends PostService
AdminPostService extends WriterPostService
правильно ли это? если правильно как это реализовать с DI? где разделять сервисы: в контроллере или в dependencies.php?