diff --git a/src/App/Application.php b/src/App/Application.php index 19f365f..b8ccd90 100644 --- a/src/App/Application.php +++ b/src/App/Application.php @@ -4,6 +4,9 @@ namespace App; use Silex\Application as SilexApplication; use Silex\Provider\SecurityServiceProvider; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\JsonResponse; +use App\Validator\SmsValidator; /** * class Application. @@ -33,6 +36,16 @@ class Application extends SilexApplication ], ], ]); + + $this['validator.sms'] = new SmsValidator(); + + $this->error(function (\Exception $e, Request $request, $code) { + return $this->json([ + 'status' => false, + 'code' => $code, + 'message' => $e->getMessage(), + ]); + }); } /* diff --git a/src/App/Validator/Helper/RequestValidator.php b/src/App/Validator/Helper/RequestValidator.php new file mode 100644 index 0000000..c8f0781 --- /dev/null +++ b/src/App/Validator/Helper/RequestValidator.php @@ -0,0 +1,25 @@ + + */ +trait RequestValidator +{ + /** + * Validates a Request + * + * @param Request $request + * + * @return bool + */ + public function validateRequest(Request $request) + { + return $this->validate(json_decode($request->getContent(), true)); + } +} diff --git a/src/App/Validator/SmsValidator.php b/src/App/Validator/SmsValidator.php new file mode 100644 index 0000000..c1a9b64 --- /dev/null +++ b/src/App/Validator/SmsValidator.php @@ -0,0 +1,25 @@ + + */ +class SmsValidator implements Validator +{ + use Helper\RequestValidator; + + /** + * {@inheritdoc} + */ + public function validate($data) + { + if (!is_array($data)) { + return false; + } + + return isset($data['sender'], $data['message'], $data['time']); + } +} diff --git a/src/App/Validator/Validator.php b/src/App/Validator/Validator.php new file mode 100644 index 0000000..28fa205 --- /dev/null +++ b/src/App/Validator/Validator.php @@ -0,0 +1,20 @@ + + */ +interface Validator +{ + /* + * Validates data. + * + * @param mixed $data + * + * @return bool + */ + public function validate($data); +} diff --git a/web/index.php b/web/index.php index 49e51db..5c67da0 100644 --- a/web/index.php +++ b/web/index.php @@ -1,15 +1,34 @@ setRootDir(__DIR__.'/../')->configure(); -$app->get('/api/sms', function () use ($app) { - return new JsonResponse(['status' => 'ok']); -}); +$app + // ->post('/api/sms/create', function (Request $request) use ($app) { + ->get('/api/sms/create', function (Request $request) use ($app) { + if (!$app['validator.sms']->validateRequest($request)) { + return $app->abort(422, 'Invalid request.'); + } + }) + ->bind('api_sms_create'); + +$app + ->delete('/api/sms/delete/{id}', function (Request $request, $id) use ($app) { + }) + ->bind('api_sms_delete') + ->assert('id', '\d+') + ->convert('id', function ($value) { + return (int) $value; + }); + +$app + ->get('/api/sms/list', function (Request $request) use ($app) { + }) + ->bind('api_sms_list'); $app->run();