/**
* @param $controllerName
* @param $action
* @param array $params
* @return string|\Zend\Stdlib\ResponseInterface
* @throws \Exception
*/
public function runControllerAction($controllerName, $action, $params = array())
{
$this->event->getRouteMatch()->setParam('controller', $controllerName)->setParam('action', $action);
foreach ($params as $key => $value) {
$this->event->getRouteMatch()->setParam($key, $value);
}
$serviceManager = $this->event->getApplication()->getServiceManager();
$controllerManager = $serviceManager->get('ControllerLoader');
/** @var AbstractActionController $controller */
$controller = $controllerManager->get($controllerName);
$controller->setEvent($this->event);
$result = $controller->dispatch($this->event->getRequest());
if ($result instanceof Response) {
return $result;
}
/** @var ViewManager $viewManager */
$viewManager = $serviceManager->get('ViewManager');
$renderingStrategy = $viewManager->getMvcRenderingStrategy();
$this->event->setViewModel($result);
/** @var ViewModel $result */
if (!$result->terminate()) {
$layout = new ViewModel();
$layoutTemplate = $renderingStrategy->getLayoutTemplate();
$layout->setTemplate($layoutTemplate);
$layout->addChild($result);
$this->event->setViewModel($layout);
}
$response = $renderingStrategy->render($this->event);
return $response;
}