X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/examples/direct/php/router.php diff --git a/examples/direct/php/router.php b/examples/direct/php/router.php new file mode 100644 index 00000000..4f35bb14 --- /dev/null +++ b/examples/direct/php/router.php @@ -0,0 +1,101 @@ +action = $_POST['extAction']; + $data->method = $_POST['extMethod']; + $data->tid = isset($_POST['extTID']) ? $_POST['extTID'] : null; // not set for upload + $data->data = array($_POST, $_FILES); +}else{ + die('Invalid request.'); +} + +function doRpc($cdata){ + global $API; + try { + if(!isset($API[$cdata->action])){ + throw new Exception('Call to undefined action: ' . $cdata->action); + } + + $action = $cdata->action; + $a = $API[$action]; + + doAroundCalls($a['before'], $cdata); + + $method = $cdata->method; + $mdef = $a['methods'][$method]; + if(!$mdef){ + throw new Exception("Call to undefined method: $method on action $action"); + } + doAroundCalls($mdef['before'], $cdata); + + $r = array( + 'type'=>'rpc', + 'tid'=>$cdata->tid, + 'action'=>$action, + 'method'=>$method + ); + + require_once("classes/$action.php"); + $o = new $action(); + + $params = isset($cdata->data) && is_array($cdata->data) ? $cdata->data : array(); + + $r['result'] = call_user_func_array(array($o, $method), $params); + + doAroundCalls($mdef['after'], $cdata, $r); + doAroundCalls($a['after'], $cdata, $r); + } + catch(Exception $e){ + $r['type'] = 'exception'; + $r['message'] = $e->getMessage(); + $r['where'] = $e->getTraceAsString(); + } + return $r; +} + + +function doAroundCalls(&$fns, &$cdata, &$returnData=null){ + if(!$fns){ + return; + } + if(is_array($fns)){ + foreach($fns as $f){ + $f($cdata, $returnData); + } + }else{ + $fns($cdata, $returnData); + } +} + +$response = null; +if(is_array($data)){ + $response = array(); + foreach($data as $d){ + $response[] = doRpc($d); + } +}else{ + $response = doRpc($data); +} +if($isForm && $isUpload){ + echo ''; +}else{ + echo json_encode($response); +}