/** * {@inheritdoc} */ public function execute(\Exception $exception) { if (!$this->dependencyInjection->get('environment')->isSilent()) { error_log($exception->getMessage() . " " . $exception->getFile() . "(" . $exception->getLine() . ")"); } $presenter = $this->getPresenter($this->request->getUrl()); $response = new Response(); $response->setStatusCode(500); $response->setContent($exception); if ($exception instanceof HTTPException) { $response->setStatusCode($exception->getStatusCode()); } $event = new ExecutePresenterEvent($this->request, $response); $this->dependencyInjection->get('eventManager')->fire('executePresenter', $event); $presenter->render($this->request, $response); }
/** * Generate html grid string * * @return string with html form */ public function render() { $sort = 0; $query = $this->request->getQuery(); if (isset($query['sort']) && isset($this->columns[$query['sort']])) { $sort = $query['sort']; } return $this->formatter->render($this->columns, $this->getRecords(), $this->dataManager->getTotalCount(), $this->limit, $this->page, $sort); }
/** * @return Response * @throws ActionNotFoundException */ private function invokeController() { $eventManager = $this->container->getEventManager(); $controller = new $this->className($this->request, $this->container); if (!is_callable([$controller, $this->methodName])) { throw new ActionNotFoundException($this->className, $this->methodName); } $response = null; $controllerData = call_user_func_array([$controller, $this->methodName], $this->request->getArguments()); if ($controllerData instanceof Response) { $response = $controllerData; } else { $response = new Response(); $response->setContent($controllerData); } if (!$response->getPresenter()) { $response->setPresenter($this->getPresenter()); } $event = new ExecutedActionEvent($this->request, $response); $eventManager->fire('executedAction', $event); return $response; }
/** * Support status code 2XX. * * @param Request $request * @param Response $response */ private function displaySuccess(Request $request, Response $response) { $data = $response->getContent(); if ($data == null) { $data = array(); } $controllerName = str_replace('\\', '/', $request->getConfig()->getAttribute('class')); $methodName = $request->getConfig()->getAttribute('method'); echo $this->twig->render($controllerName . '/' . $methodName . '.twig', $data); }
/** * Check authenticate. * * @param string $redirect * @param Request $request * @return Response */ private function createResponseRedirect($redirect, Request $request) { $response = new Response(); if ($request->isAjax()) { $response->setStatusCode(401); $response->setHeader('X-Location', $redirect); } else { $response->redirect($redirect); } return $response; }
/** * Submit form. Check http confirm and validate fields * * @param Request $request * @throws \Exception */ public function submit(Request $request) { $this->isConfirmed = false; if ($this->formTags['method'] == 'post' && $request->getType() == 'POST') { $this->isConfirmed = true; } $query = $request->getQuery(); if (count($this->fields) > 0 && $this->formTags['method'] == 'get' && isset($query[$this->fields[0]->getName()])) { $this->isConfirmed = true; } if (!$this->isConfirmed) { return; } if ($this->formTags['method'] == 'post') { $storage = $request->getData(); } else { $storage = $request->getQuery(); } //set field data $result = []; foreach ($this->fields as $field) { if (isset($storage[$field->getName()])) { $field->setData($storage[$field->getName()]); } else { if ($field instanceof FileField) { try { $field->setData($request->getFile($field->getName())); } catch (FileNotUploadedException $e) { $field->setData(''); } } else { if (preg_match('/^(.*?)(\\[.*\\])$/', $field->getName(), $result) && isset($storage[$result[1]])) { //array if (!preg_match_all("/\\[(.*?)\\]/", $result[2], $resultDeep)) { throw new \Exception('Invalid field name.'); //FIXME dedicate exception } $value = $storage[$result[1]]; foreach ($resultDeep[1] as $deep) { if (!isset($value[$deep])) { $value = null; break; } $value = $value[$deep]; } if ($result[2] == '') { //FIXME autoincrement field } else { $field->setData($value); } } else { //for checkbox or disabled field $field->setData(null); } } } } //validate if ($request->isFullUploadedData()) { foreach ($this->fields as $field) { if ($field->getValidator()) { if ($error = $field->getValidator()->validate($field->getData())) { $field->setError($error); } } } } else { foreach ($this->fields as $field) { $field->setError('Request data is too large.'); } } }
/** * Validate url. * * @param Request $request * @param Config $config argument * @param int $position * @return string * @throws RequiredArgumentException */ private function validateUrl(Request $request, $config, $position) { $url = $request->getUrl(); $default = $config->getAttribute('default'); if (preg_match('/^' . $config->getAttribute('pattern') . '$/', $url, $matches) && isset($matches[1])) { return $matches[1]; } else { if ($default !== false) { return $config->getAttribute('default'); } else { throw new RequiredArgumentException($position, $config->getAttribute('name')); } } }