/** * Выполняет обработку запроса * * @param WS_Environment $env * * @return mixed */ public function run(WS_Environment $env) { $m = false; foreach ($this->patterns as $p => $r) { $pattern_match = preg_match($p, $env->request->urn); if ($pattern_match) { $m = true; if ($this->clear_url) { $env->request->uri(preg_replace($p, $r, $env->request->urn)); } } } $env->pdf = (object) array('active' => $m); $r = $this->application->run($env); if ($env->pdf->active) { $response = Net_HTTP::merge_response($r, $env->{$response}); if (!$response->status->is_success) { return $r; } if (isset($env->config) && isset($env->config->pdf)) { foreach ($env->config->pdf as $option => $v) { if (isset($this->{$option})) { $this->{$option} = $v; } } } if (!class_exists('mPDF')) { include $this->mpdf_dir; } $mpdf = new mPDF(); foreach ($this->options as $name => $v) { $mpdf->{$name} = $v; } if (is_callable($env->pdf->callback)) { $env->response = $response; return call_user_func($env->pdf->callback, $mpdf, $env); } else { $mpdf->WriteHTML((string) $response->body); $mpdf->Output(!empty($env->pdf->title) ? $env->pdf->title : $this->title, 'D'); } } else { return $r; } }
/** * @param WS_Environment $env * * @return Net_HTTP_Response */ public function run(WS_Environment $env) { //if ($this->disabled) return $this->application->run($env); $error = null; try { $body = $this->application->run($env); $response = Net_HTTP::merge_response($body, $env->response); } catch (Exception $e) { $error = $e; if ($this->disabled) { throw $e; } $response = Net_HTTP::Response(Net_HTTP::INTERNAL_SERVER_ERROR); } if (!$response->body && ($template = $this->find_template_name_for($response->status))) { if (isset($env->not_found->static_file)) { $response->body(IO_FS::File($env->not_found->static_file)); } else { $layout = isset($env->not_found->layout) ? $env->not_found->layout : 'work'; $view = Templates::HTML($template); if ($layout) { $view->within_layout($layout); } $view->root->with(array('env' => $env, 'response' => $response, 'error' => $error)); if ($view->exists()) { $response->body($view); } else { if (IO_FS::exists($static_name = $template . '.html')) { $response->body(IO_FS::File($static_name)); } } } } Events::call('ws.status', $response); return $response; }
/** * Запускает приложение * * @param WS_ServiceInterface $app * * @return WS_Runner */ public function run(WS_ServiceInterface $app) { $environment = WS::env(); $environment->request = $this->adapter->make_request(); $rc = Events::call('ws.run'); if (!is_null($rc)) { return $rc; } $environment->response = Net_HTTP::Response(); $body = $app->run($environment); $response = Net_HTTP::merge_response($body, $environment->response); return $this->adapter->process_response($response); }