Вместо того, чтобы иметь «Модель», вы можете обернуть компоненты Doctrine в Сервис и сделать ваш контроллер максимально простым. При использовании инфраструктуры MVC важно или нет, важно следовать SOLID, особенно принципу единой ответственности (SRP).
Рассмотрим следующий упрощенный пример:
class UserService extends AbstractService
{
private $em;
private $repository;
public function __construct(EntityManager $em, UserRepository $repository)
{
$this->em = $em;
$this->repository = $repository;
}
public function create($data)
{
// business logic here
$user = new User();
$user->setUsername($data['username']);
$user->setEmail($data['email']);
$em->persist($this->user);
$em->flush();
}
public function getLatest()
{
// additional business logic could be implemented
return $this->repository->getLatest();
}
}
Тогда я могу позвонить в сервис из контроллера или из любого другого сервиса:
class UserController extends Controller
{
/**
* @var UserService $service
*/
private $service;
public function __construct(UserService $service)
{
$this->service = $service;
}
public function create()
{
// some form validation here
$data = $this->input->post('user');
$result = $this->service->create($data);
// do something with the result
}
}