/**
  * handleAction implementation for rest controllers. This handles the requested action differently then the standard
  * implementation.
  *
  * @param SS_HTTPRequest $request
  * @param string $action
  * @return HTMLText|SS_HTTPResponse
  */
 protected function handleAction($request, $action)
 {
     foreach ($request->latestParams() as $k => $v) {
         if ($v || !isset($this->urlParams[$k])) {
             $this->urlParams[$k] = $v;
         }
     }
     // set the action to the request method / for developing we could use an additional parameter to choose another method
     $action = $this->getMethodName($request);
     $this->action = $action;
     $this->requestParams = $request->requestVars();
     $className = get_class($this);
     // create serializer
     $serializer = SerializerFactory::create_from_request($request);
     $response = $this->getResponse();
     try {
         if (!$this->hasAction($action)) {
             // method couldn't found on controller
             throw new RestUserException("Action '{$action}' isn't available on class {$className}.", 404);
         }
         if (!$this->checkAccessAction($action)) {
             throw new RestUserException("Action '{$action}' isn't allowed on class {$className}.", 404);
         }
         $res = $this->extend('beforeCallActionHandler', $request, $action);
         if ($res) {
             return reset($res);
         }
         // perform action
         $actionRes = $this->{$action}($request);
         $res = $this->extend('afterCallActionHandler', $request, $action);
         if ($res) {
             return reset($res);
         }
         // set content type
         $body = $actionRes;
     } catch (RestUserException $ex) {
         // a user exception was caught
         $response->setStatusCode("404");
         $body = ['message' => $ex->getMessage(), 'code' => $ex->getCode()];
     } catch (RestSystemException $ex) {
         // a system exception was caught
         $response->addHeader('Content-Type', $serializer->contentType());
         $response->setStatusCode("500");
         $body = ['message' => $ex->getMessage(), 'code' => $ex->getCode()];
         if (Director::isDev()) {
             $body = array_merge($body, ['file' => $ex->getFile(), 'line' => $ex->getLine(), 'trace' => $ex->getTrace()]);
         }
     } catch (Exception $ex) {
         // an unexpected exception was caught
         $response->addHeader('Content-Type', $serializer->contentType());
         $response->setStatusCode("500");
         $body = ['message' => $ex->getMessage(), 'code' => $ex->getCode()];
         if (Director::isDev()) {
             $body = array_merge($body, ['file' => $ex->getFile(), 'line' => $ex->getLine(), 'trace' => $ex->getTrace()]);
         }
     }
     $response->setBody($serializer->serialize($body));
     // set CORS header from config
     $response = $this->addCORSHeaders($response);
     return $response;
 }
예제 #2
0
<?php

$serializer = SerializerFactory::getSerializer('contacts');
// $user_id = isset($_GET['uid']) ? $_GET['uid'] : null;
$data = $serializer->getData($_GET);
//get is actually supoer global, but nvm that, it is probper to pass the request as parameter to the serializer
if ($data && $data['list'] && sizeof($data['list']) > 0) {
    Router::Render('contacts', $data);
} else {
    Router::RenderEmptyResultSet('contacts');
}
 public function testResult()
 {
     $factory = new SerializerFactory();
     $this->assertInstanceOf('Team3\\PayU\\Serializer\\SerializerInterface', $factory->build($this->getLogger()));
 }
예제 #4
0
<?php

require_once $_SERVER['DOCUMENT_ROOT'] . '/src/includes.php';
if (!isset($_GET['endpoint']) || !$_GET['endpoint']) {
    http_response_code(400);
    exit(1);
    // throw new exception('Status code: 400');//Raise 400 error, bad request
}
$serializer = SerializerFactory::getSerializer($_GET['endpoint']);
if ($serializer && is_callable(array($serializer, 'getData'))) {
    //TODO: create abstract serializer class and to check that $serializer is instanceOf it
    $data = $serializer->getData($_GET);
    //get is actually supoer global, but nvm that, it is probper to pass the request as parameter to the serializer
} else {
    http_response_code(400);
    exit(1);
    // throw new exception('Status code:  400');//raid 400, bad request, TODO: catch this exception and uncomment
}
if (isset($data) && isset($data['list']) && sizeof($data['list']) > 0) {
    Router::Render($_GET['endpoint'], $data);
} else {
    $fullName = isset($data, $data['__fullName']) ? $data['__fullName'] : null;
    Router::RenderEmptyResultSet($_GET['endpoint'], $fullName);
}
?>
 
 /**
  * @param mixed $baseObject
  * @param bool  $exposeClassName
  * @return array
  *
  * @todo refactor this out somewhere once we start implementing in new formats
  */
 protected function objectToArray($baseObject, $exposeClassName = true)
 {
     $currentClassName = '';
     $data = array();
     if (false === is_array($baseObject)) {
         $currentClassName = get_class($baseObject);
     }
     if ($this->isWithinBounds()) {
         $this->incrementCurrentDepth();
         $objAsArray = is_object($baseObject) ? (array) $baseObject : $baseObject;
         if (true === SerializerFactory::canIterate($objAsArray)) {
             $this->iterateClassProperties($objAsArray, $data, $exposeClassName, $baseObject, $currentClassName);
         }
         $this->decrementCurrentDepth();
     }
     return $data;
 }
예제 #6
0
<?php

$serializer = SerializerFactory::getSerializer('users');
$data = $serializer->getData();
//get is actually supoer global, but nvm that, it is probper to pass the request as parameter to the serializer
Router::Render('users', $data);
예제 #7
0
<?php

$serializer = SerializerFactory::getSerializer('bdays');
// $user_id = isset($_GET['uid']) ? $_GET['uid'] : null;
$data = $serializer->getData($_GET);
//get is actually supoer global, but nvm that, it is probper to pass the request as parameter to the serializer
if ($data && $data['list'] && sizeof($data['list']) > 0) {
    Router::Render('bdays', $data);
} else {
    Router::RenderEmptyResultSet('bdays');
}