Removing business logic from your controller is a great idea for code reuse and maintainability; however, I would recommend not shifting the logic to your models. A better solution would be to add a service level to your application.
What is the level of service? Martin Fowler describes this as the following :
[ ] , .
, .
, - . - .
"" API, :
interface ServiceInterface
{
public function setObjectManager($objectManager);
public function setRepository($respository);
public function find($id);
public function fetchRow($criteria);
public function fetchAll($criteria);
public function insert($object);
public function update($object);
public function delete($object);
}
"LanguageService".
class LanguageService implements ServiceInterface
{
public function getLanguageList()
{
return $this->repository->getLanguagesList();
}
}
,
class FooController extends AbstractActionController
{
protected $languageService;
public function __construct(ServiceInterface $languageService)
{
$this->languageService = $languageService;
}
public function indexAction()
{
$languages = $this->languageService->getLanguageList();
$viewModel = new ViewModel(['languages' => $languages]);
return $viewModel;
}
public function insertAction()
{
$request = $this->getRequest();
$service = $this->languageService;
$form = $service->getInsertForm();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
$language = $service->insert($form->getData());
if ($language instanceof Entity\Language) {
} else {
}
}
}
}
}