| */␊ |
| public static function dispatch($query='')␊ |
| {␊ |
| ␉␉$query = preg_replace('#^(/)+#', '/', '/'.$query);␊ |
| $req = new Pluf_HTTP_Request($query);␊ |
| $middleware = array();␊ |
| foreach (Pluf::f('middleware_classes', array()) as $mw) {␊ |
| $middleware[] = new $mw();␊ |
| }␊ |
| $skip = false;␊ |
| foreach ($middleware as $mw) {␊ |
| if (method_exists($mw, 'process_request')) {␊ |
| $response = $mw->process_request($req);␊ |
| if ($response !== false) {␊ |
| // $response is a response␊ |
| $response->render($req->method != 'HEAD' and !defined('IN_UNIT_TESTS'));␊ |
| $skip = true;␊ |
| break;␊ |
| } ␊ |
| }␊ |
| }␊ |
| if ($skip === false) { ␊ |
| $response = self::match($req);␊ |
| if (!empty($req->response_vary_on)) {␊ |
| $response->headers['Vary'] = $req->response_vary_on;␊ |
| try {␊ |
| $query = preg_replace('#^(/)+#', '/', '/'.$query);␊ |
| $req = new Pluf_HTTP_Request($query);␊ |
| $middleware = array();␊ |
| foreach (Pluf::f('middleware_classes', array()) as $mw) {␊ |
| $middleware[] = new $mw();␊ |
| }␊ |
| $middleware = array_reverse($middleware);␊ |
| $skip = false;␊ |
| foreach ($middleware as $mw) {␊ |
| if (method_exists($mw, 'process_response')) {␊ |
| $response = $mw->process_response($req, $response);␊ |
| } ␊ |
| if (method_exists($mw, 'process_request')) {␊ |
| $response = $mw->process_request($req);␊ |
| if ($response !== false) {␊ |
| // $response is a response␊ |
| if (Pluf::f('pluf_runtime_header', false)) {␊ |
| $response->headers['X-Perf-Runtime'] = sprintf('%.5f', (microtime(true) - $GLOBALS['_PX_starttime']));␊ |
| }␊ |
| $response->render($req->method != 'HEAD' and !defined('IN_UNIT_TESTS'));␊ |
| $skip = true;␊ |
| break;␊ |
| } ␊ |
| }␊ |
| }␊ |
| if ($skip === false) { ␊ |
| $response = self::match($req);␊ |
| if (!empty($req->response_vary_on)) {␊ |
| $response->headers['Vary'] = $req->response_vary_on;␊ |
| }␊ |
| $middleware = array_reverse($middleware);␊ |
| foreach ($middleware as $mw) {␊ |
| if (method_exists($mw, 'process_response')) {␊ |
| $response = $mw->process_response($req, $response);␊ |
| } ␊ |
| }␊ |
| if (Pluf::f('pluf_runtime_header', false)) {␊ |
| $response->headers['X-Perf-Runtime'] = sprintf('%.5f', (microtime(true) - $GLOBALS['_PX_starttime']));␊ |
| }␊ |
| $response->render($req->method != 'HEAD' and !defined('IN_UNIT_TESTS'));␊ |
| }␊ |
| } catch (Exception $e) {␊ |
| if (Pluf::f('debug', false) == true) {␊ |
| $response = new Pluf_HTTP_Response_ServerErrorDebug($e);␊ |
| } else {␊ |
| $response = new Pluf_HTTP_Response_ServerError($e);␊ |
| }␊ |
| $response->render($req->method != 'HEAD' and !defined('IN_UNIT_TESTS'));␊ |
| }␊ |
|
| $priority[$key] = $control['priority'];␊ |
| }␊ |
| array_multisort($priority, SORT_ASC, $GLOBALS['_PX_views']);␊ |
| foreach ($GLOBALS['_PX_views'] as $key => $ctl) {␊ |
| $match = array();␊ |
| if (preg_match($ctl['regex'], $req->query, $match)) {␊ |
| try {␊ |
| try {␊ |
| foreach ($GLOBALS['_PX_views'] as $key => $ctl) {␊ |
| $match = array();␊ |
| if (preg_match($ctl['regex'], $req->query, $match)) {␊ |
| $req->view = $ctl;␊ |
| $m = new $ctl['model']();␊ |
| if (isset($m->{$ctl['method'].'_precond'})) {␊ |
|
| } else {␊ |
| return $m->$ctl['method']($req, $match, $ctl['params']);␊ |
| }␊ |
| } catch (Pluf_HTTP_Error404 $e) {␊ |
| // Need to add a 404 error handler␊ |
| // something like Pluf::f('404_handler', 'class::method')␊ |
| } catch (Exception $e) {␊ |
| if (Pluf::f('debug', false) == true) {␊ |
| return new Pluf_HTTP_Response_ServerErrorDebug($e);␊ |
| } else {␊ |
| return new Pluf_HTTP_Response_ServerError($e);␊ |
| }␊ |
| }␊ |
| }␊ |
| } catch (Pluf_HTTP_Error404 $e) {␊ |
| // Need to add a 404 error handler␊ |
| // something like Pluf::f('404_handler', 'class::method')␊ |
| }␊ |
| return new Pluf_HTTP_Response_NotFound($req);␊ |
| }␊ |