Base of actions with POC of validation

This commit is contained in:
Simon Vieille 2018-01-12 16:40:18 +01:00
parent a67d15089a
commit 7bacb3474c
No known key found for this signature in database
GPG key ID: 919533E2B946EA10
5 changed files with 106 additions and 4 deletions

View file

@ -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(),
]);
});
}
/*

View file

@ -0,0 +1,25 @@
<?php
namespace App\Validator\Helper;
use Symfony\Component\HttpFoundation\Request;
/**
* trait RequestValidator.
*
* @author Simon Vieille <simon@deblan.fr>
*/
trait RequestValidator
{
/**
* Validates a Request
*
* @param Request $request
*
* @return bool
*/
public function validateRequest(Request $request)
{
return $this->validate(json_decode($request->getContent(), true));
}
}

View file

@ -0,0 +1,25 @@
<?php
namespace App\Validator;
/**
* class SmsValidator.
*
* @author Simon Vieille <simon@deblan.fr>
*/
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']);
}
}

View file

@ -0,0 +1,20 @@
<?php
namespace App\Validator;
/**
* interface Validator.
*
* @author Simon Vieille <simon@deblan.fr>
*/
interface Validator
{
/*
* Validates data.
*
* @param mixed $data
*
* @return bool
*/
public function validate($data);
}

View file

@ -1,15 +1,34 @@
<?php
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Application;
use Symfony\Component\HttpFoundation\Request;
require_once __DIR__.'/../vendor/autoload.php';
$app = new Application();
$app->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();