public function create() { $url = $this->request('url'); if (!is_object($url)) { $result = $this->result(); return $result; } $url = $url->value; $request = clone $this->request(); $data = $this->request('data'); $main = $request->data; unset($request->function); unset($request->controller); unset($request->route); unset($request->parameter); unset($request->data); $request->data = array(); if (!empty($main)) { foreach ($main as $key => $node) { if ($node->name == 'data') { continue; //the createRequestData putted it in $request->data... } $request->data[] = $node; } } $data = $this->createRequestData($data); foreach ($data as $nr => $node) { $request->data[] = $node; } $request->parameter = ''; $web = $this->json('Priya\\Url.web'); $parameter = str_replace($web, '/', $url); if ($parameter == $url) { $web_application = $this->json('Priya\\Url.web_application'); $parameter = str_replace($web_application, '/', $url); } $request->parameter = $parameter; $request->url = $url; $route = new Route($this->json()); $item = $route->find($request); if (empty($item->controller)) { $file = basename($item->url); $tmp = explode('.', $file); $extension = ''; if (count($tmp) > 1) { $extension = array_pop($tmp); } if (empty($extension)) { throw new Route\Exception\Error('Route not found for request: ' . $item->url); } } $result = false; if (!empty($item->function)) { try { $controller = new $item->controller($this->json()); if (method_exists($controller, $item->function) === false) { $message = 'method (' . $item->function . ') not exists in class: (' . get_class($controller) . ')'; throw new Priya\Module\Exception\Error($message); die; //to remove this die we need to fix application to handle errors in the result... } $result = $controller->{$item->function}(); } catch (Priya\Module\Exception\Error $error) { echo $error; die; } catch (Exception $exception) { $obj = new Priya\Module\Exception\Error($exception->getMessage(), 0); $obj->file($exception->getFile()); $obj->line($exception->getLine()); $obj->previous($exception->getPrevious()); $obj->trace($exception->getTrace()); throw $obj; die; } } if (!empty($result)) { if (!empty($result->link)) { $link = $this->json('link'); foreach ($result->link as $nr => $record) { $link[] = $record; } unset($result->link); $this->json('link', $link); } if (!empty($result->script)) { $script = $this->json('script'); foreach ($result->script as $nr => $record) { $script[] = $record; } unset($result->script); $this->json('script', $script); } $this->json('content', $result); } else { //throw new Dialog\Exception\Error('Content failed'); } $result = $this->result(); $this->debug($result, true); return $result; }
public function run() { $route = $this->route(); $request = $this->request(); if ($this->isObject($route, 'Priya\\Module\\Route') === false) { return false; } if ($this->isObject($request, 'Priya\\Module\\Request') === false) { return false; } $route->run(); $data = $request->data(); $result = array(); foreach ($data as $nr => $item) { if (empty($item->controller)) { $file = basename($item->url); $tmp = explode('.', $file); $extension = ''; if (count($tmp) > 1) { $extension = array_pop($tmp); } if (empty($extension)) { throw new Module\Route\Exception\Error('Route not found for request: ' . $item->url); } continue; } if (empty($item->function)) { continue; } try { $controller = new $item->controller($this->json()); if (method_exists($controller, $item->function) === false) { $message = 'method (' . $item->function . ') not exists in class: (' . get_class($controller) . ')'; throw new Module\Exception\Error($message); continue; } $result[$nr] = $controller->{$item->function}(); } catch (Module\Exception\Error $error) { echo $error; } catch (Exception $exception) { $obj = new Module\Exception\Error($exception->getMessage(), 0); $obj->file($exception->getFile()); $obj->line($exception->getLine()); $obj->previous($exception->getPrevious()); $obj->trace($exception->getTrace()); throw $obj; } } if (empty($result)) { // $this->debug($data,true); } else { foreach ($result as $nr => $item) { if (isset($data[$nr])) { if (empty($item)) { $item = new stdClass(); } $item->request = $data[$nr]; } if (isset($item->request) && isset($item->request->contentType)) { if (stristr($item->request->contentType, 'json') !== false) { echo $this->object($item, 'json'); } else { echo $item->html; } } else { echo $item->html; } } } }