То что вы описываете - подход с использованием толстых контроллеров. Откройте для себя дивный мир
Service-Oriented Architecture. Вообще как, модели, они же доменные модели, это просто представление данных. За сохранение данных и их обработку, валидацию и т.д. отвечают сервисы. Контроллеры так же можно представлять в виде сервисов, и из задача будет только проверка, имеет ли пользователь доступ к данной операции, что собственно нужно сделать и т.д. Таким образом контроллер может вообще не иметь понятия о том, где хранятся данные, как они обрабатываются... Он просто смотрит что пользователь может сохранять данные, передает данные пользователя сервису, тот сохраняет....
Короче как-то так.
Пример модели:
class User
{
private $id;
private $email;
private $password;
private $enabled;
public function getId() {...}
public function getEmail() {...}
public function setEmail($email) {...}
public function getPassword() {...}
// за хэширование пароля отвечает сервис, модель ничего об этом знать не должна.
public function setPassword($password) {...}
public function isActive() {}
public function activate() {}
}
пример контроллера
/**
* @Route("/users")
* @Method("POST")
*/
public function createUserAction(Request $request) {
if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) {
throw new AccessDeniedException();
}
$user = new User();
$form = $this->createForm(new UserForm(), $user);
$form->bindRequest($request);
if (!$form->isValid()) {
// save errors to session, redirect
return $this->redirecti(...);
}
$user = $form->getData();
$this->get('app.user_manager')->createUser($user);
return $this->redirect();
}