/** * @param MvcEvent $e * @return mixed|\Zend\Http\Response|ViewModelInterface */ public function onDispatch(MvcEvent $e) { if (!empty($this->options['allowedMethods']) && !in_array($this->sebaksRequest->getMethod(), $this->options['allowedMethods'])) { return $this->error->methodNotAllowed(); } $e->setParam('sebaksRequest', $this->sebaksRequest); $e->setParam('sebaksResponse', $this->sebaksResponse); $routeName = $e->getRouteMatch()->getMatchedRouteName(); $this->getEventManager()->trigger("dispatch.{$routeName}.pre", $e); $this->controller->dispatch($this->sebaksRequest, $this->sebaksResponse); $this->getEventManager()->trigger("dispatch.{$routeName}.post", $e); $criteriaErrors = $this->sebaksResponse->getCriteriaErrors(); if (!empty($criteriaErrors)) { return $this->error->notFoundByRequestedCriteria($criteriaErrors); } $changesErrors = $this->sebaksResponse->getChangesErrors(); $redirectTo = $this->sebaksResponse->getRedirectTo(); if (empty($changesErrors) && !empty($redirectTo)) { if (is_array($redirectTo)) { if (!isset($redirectTo['route'])) { throw new \RuntimeException('Missing required parameter route'); } $routeParams = isset($redirectTo['params']) ? $redirectTo['params'] : []; $routeOptions = isset($redirectTo['options']) ? $redirectTo['options'] : []; return $this->redirect()->toRoute($redirectTo['route'], $routeParams, $routeOptions); } else { return $this->redirect()->toRoute($redirectTo); } } if (!empty($changesErrors)) { $result = $this->error->changesErrors($changesErrors); if ($result instanceof Response) { return $result; } } $this->viewModel->setVariables($this->sebaksResponse->toArray()); $e->setResult($this->viewModel); return $this->viewModel; }
/** * Populate the view model returned by the AcceptableViewModelSelector from the result * * If the result is a ViewModel, we "re-cast" it by copying over all * values/settings/etc from the original. * * If the result is an array, we pass those values as the view model variables. * * @param array|ViewModel $result * @param ViewModelInterface $viewModel * @param MvcEvent $e */ protected function populateViewModel($result, ViewModelInterface $viewModel, MvcEvent $e) { if ($result instanceof ViewModel) { // "Re-cast" content-negotiation view models to the view model type // selected by the AcceptableViewModelSelector $viewModel->setVariables($result->getVariables()); $viewModel->setTemplate($result->getTemplate()); $viewModel->setOptions($result->getOptions()); $viewModel->setCaptureTo($result->captureTo()); $viewModel->setTerminal($result->terminate()); $viewModel->setAppend($result->isAppend()); if ($result->hasChildren()) { foreach ($result->getChildren() as $child) { $viewModel->addChild($child); } } $e->setResult($viewModel); return; } // At this point, the result is an array; use it to populate the view // model variables $viewModel->setVariables($result); $e->setResult($viewModel); }
/** * Set a list of variables in the View Model * @param array $variables */ protected function setVariables(array $variables) { $this->model->setVariables($variables); }
/** * Merge global/template parameters with provided view model. * * @param string $name Template name. * @param ModelInterface $model * @return ModelInterface */ private function mergeViewModel($name, ModelInterface $model) { $params = $this->mergeParams($name, $model->getVariables()); $model->setVariables($params); $model->setTemplate($name); return $model; }