Example #1
0
function doRpc($cdata)
{
    $API = get_extdirect_api('router');
    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();
        if (isset($mdef['len'])) {
            $params = isset($cdata->data) && is_array($cdata->data) ? $cdata->data : array();
        } else {
            $params = array($cdata->data);
        }
        array_push($params, $cdata->metadata);
        $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;
}
Example #2
0
<?php

require 'config.php';
header('Content-Type: text/javascript');
$API = get_extdirect_api('api');
# convert API config to Ext.Direct spec
$actions = array();
foreach ($API as $aname => &$a) {
    $methods = array();
    foreach ($a['methods'] as $mname => &$m) {
        if (isset($m['len'])) {
            $md = array('name' => $mname, 'len' => $m['len']);
        } else {
            $md = array('name' => $mname, 'params' => $m['params']);
        }
        if (isset($m['formHandler']) && $m['formHandler']) {
            $md['formHandler'] = true;
        }
        if (isset($m['metadata'])) {
            $md['metadata'] = $m['metadata'];
        }
        $methods[] = $md;
    }
    $actions[$aname] = $methods;
}
$cfg = array('url' => 'data/direct/router.php', 'type' => 'remoting', 'actions' => $actions);
echo 'Ext.ns("Ext.app"); Ext.app.REMOTING_API = ';
echo json_encode($cfg);
echo ';';