/** * 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; }
<?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())); }
<?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; }
<?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);
<?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'); }