CrossUI PHP Backend Demo

PHP back-end for CrossUI

CrossUI PHP Backend Demo

Postby linb » Tue May 14, 2013 1:25 am

xuiservice.php:

php code
<?php
// input and output keys
define('XUI_KEYWORD_CALLBACK', "callback");
define('XUI_KEYWORD_DATA', "data");
define('XUI_KEYWORD_ERROR', "error");

// for json
if(!function_exists('json_encode')){
include_once("JSON.php");
function json_encode($var){
return (new JSON).encode($var);
}
function json_decode($str){
return (new JSON).decode($str);
}
}

// handle request data
function xui_getRequestData(){
$callback = XUI_KEYWORD_CALLBACK;
$inputData=new stdClass;

// 1. for "post" request
// 1.1. form post( a=b$c=d )
if(count($_POST)>0){
foreach ($_POST as $k=>$v)
$inputData->$k = get_magic_quotes_gpc()?stripslashes($v):$v;
// 1.2. form post( {a:'b',c:'d'} ) or xmlhttp post
}else{
$request = file_get_contents('php://input');
if($request){
$request = json_decode($request);
foreach ($request as $k=>$v)
$inputData->$k = is_string($v)?get_magic_quotes_gpc()?stripslashes($v):$v:$v;
}
}

// 2. for "get" request
$request = $_SERVER['QUERY_STRING'];
// 2.1. get ?a=b$c=d
if($request){
if(strstr($request,'=')!==false){
foreach ($_GET as $k=>$v)
$inputData->$k = get_magic_quotes_gpc()?stripslashes($v):$v;
// 2.2. get ?{a:'b',c:'d'}
}else{
$request = json_decode(rawurldecode($request));
foreach ($request as $k=>$v)
$inputData->$k = is_string($v)?get_magic_quotes_gpc()?stripslashes($v):$v:$v;
}
}
return $inputData;
}

// echo response data, or error info
function xui_echoResponse($inputData, $outputData, $ok=true){
$callback = XUI_KEYWORD_CALLBACK;
$data = XUI_KEYWORD_DATA;
$err = XUI_KEYWORD_ERROR;

if(isset($inputData)){
if(isset($inputData->$callback))
$callbackV=$inputData->$callback;
unset($inputData);
}

$outputDataWrapped=new stdClass;

if($ok)
$outputDataWrapped->$data = $outputData;
else
$outputDataWrapped->$err = $outputData;

$outputDataWrapped=json_encode($outputDataWrapped);

// wrap result data for xui.IAjax and xui.SAjax
if(_.isset($callbackV)){
// for xui.IAjax
if($callbackV=="window.name"){
$outputDataWrapped="<script type='text' id='json'>".$outputDataWrapped."</script><script type='text/javascript'>window.name=document.getElementById('json').innerHTML;</script>";
}
// for xui.SAjax
else{
$outputDataWrapped = $callbackV.'('.$outputDataWrapped.')';
}
}
// for xui.Ajax
echo $outputDataWrapped;
}

/* example
public function action(){
$inputData = xui_getRequestData();
$outputData = null;
$ok=true;

// $outputData=...
// $ok=true;

xui_echoResponse($inputData, $outputData, $ok);
}
*/
?>


demo.php:

php code
<?php
// include lib
include_once("xuiservice.php");

/**
* the following code may be in a controller function( for Yii, CodeIgniter etc..)
**/
$outputData=new stdClass;
$ok=true;

try{
// get request data
$inputData = xui_getRequestData();

if(rand(0,1)>0.5){
// successful
$ok=true;

// business logic code
// $outputData can be any variable
$outputData->strRresult="str";
$outputData->intResult=microtime()*1000000;

$outputData->inputData=$inputData;

}else{
// fail
$ok=false;

// error info
$outputData->code="1";
$outputData->message="error message";
}
}catch (Exception $e){
// fail
$ok=false;

// error info
$outputData->code=$e->getCode();
$outputData->message=$e->getMessage();
}

// echo result
xui_echoResponse($inputData, $outputData, $ok);
?>


xui.backend.PHP.zip
(7 KiB) Downloaded 694 times

CrossUI PHP Backend Demo - online
linb
Site Admin
 
Posts: 102
Joined: Thu Apr 25, 2013 6:51 am

Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest