mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Implementado filtro CORS y ejemplo de resources para la API
This commit is contained in:
@ -26,6 +26,7 @@ class Filters extends BaseConfig
|
||||
'honeypot' => Honeypot::class,
|
||||
'invalidchars' => InvalidChars::class,
|
||||
'secureheaders' => SecureHeaders::class,
|
||||
'cors' => \App\Filters\Cors::class
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@ -918,14 +918,31 @@ $routes->group('produccion', ['namespace' => 'App\Controllers\Produccion'], func
|
||||
*/
|
||||
$routes->post('auth/jwt', '\App\Controllers\Sistema\AuthAPIController::jwtLogin');
|
||||
|
||||
$routes->group('api', ['filter' => 'jwt'], static function ($routes) {
|
||||
$routes->get('test', 'Test::echo');
|
||||
// ...
|
||||
});
|
||||
$routes->group(
|
||||
'api',
|
||||
[
|
||||
'namespace' => 'App\Controllers\API',
|
||||
'filter' => 'jwt'
|
||||
],
|
||||
static function ($routes) {
|
||||
|
||||
$routes->resource('items', [
|
||||
'controller' => 'ItemsController',
|
||||
'filter' => 'cors'
|
||||
]);
|
||||
|
||||
$routes->options('items', static function () { });
|
||||
$routes->options('items/(:any)', static function () { });
|
||||
|
||||
|
||||
|
||||
// ...
|
||||
}
|
||||
);
|
||||
|
||||
/*
|
||||
* --------------------------------------------------------------------
|
||||
* Translation
|
||||
* Translation
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
$routes->group('translate', ['namespace' => 'App\Controllers'], function ($routes) {
|
||||
|
||||
103
ci4/app/Controllers/API/ItemsController.php
Normal file
103
ci4/app/Controllers/API/ItemsController.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\API;
|
||||
|
||||
use CodeIgniter\RESTful\ResourceController;
|
||||
use CodeIgniter\API\ResponseTrait;
|
||||
use App\Models\API\ItemModel;
|
||||
|
||||
class ItemsController extends ResourceController
|
||||
{
|
||||
|
||||
use ResponseTrait;
|
||||
|
||||
public function index()
|
||||
{
|
||||
$model = new ItemModel();
|
||||
$data = $model->findAll();
|
||||
return $this->respond($data);
|
||||
}
|
||||
|
||||
public function show($id = null)
|
||||
{
|
||||
$model = new ItemModel();
|
||||
$data = $model->find(['id' => $id]);
|
||||
if (!$data)
|
||||
return $this->failNotFound('No Data Found');
|
||||
return $this->respond($data[0]);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
helper(['form']);
|
||||
$rules = [
|
||||
'title' => 'required',
|
||||
'price' => 'required'
|
||||
];
|
||||
$data = [
|
||||
'title' => $this->request->getVar('title'),
|
||||
'price' => $this->request->getVar('price')
|
||||
];
|
||||
|
||||
if (!$this->validate($rules))
|
||||
return $this->fail($this->validator->getErrors());
|
||||
$model = new ItemModel();
|
||||
$model->save($data);
|
||||
$response = [
|
||||
'status' => 201,
|
||||
'error' => null,
|
||||
'messages' => [
|
||||
'success' => 'Data Inserted'
|
||||
]
|
||||
];
|
||||
return $this->respondCreated($response);
|
||||
}
|
||||
|
||||
public function update($id = null)
|
||||
{
|
||||
helper(['form']);
|
||||
$rules = [
|
||||
'title' => 'required',
|
||||
'price' => 'required'
|
||||
];
|
||||
$data = [
|
||||
'title' => $this->request->getVar('title'),
|
||||
'price' => $this->request->getVar('price')
|
||||
];
|
||||
|
||||
if (!$this->validate($rules))
|
||||
return $this->fail($this->validator->getErrors());
|
||||
$model = new ItemModel();
|
||||
$find = $model->find(['id' => $id]);
|
||||
if (!$find)
|
||||
return $this->failNotFound('No Data Found');
|
||||
$model->update($id, $data);
|
||||
|
||||
$response = [
|
||||
'status' => 200,
|
||||
'error' => null,
|
||||
'messages' => [
|
||||
'success' => 'Data updated'
|
||||
]
|
||||
];
|
||||
return $this->respond($response);
|
||||
}
|
||||
|
||||
public function delete($id = null)
|
||||
{
|
||||
$model = new ItemModel();
|
||||
$find = $model->find(['id' => $id]);
|
||||
if (!$find)
|
||||
return $this->failNotFound('No Data Found');
|
||||
$model->delete($id);
|
||||
|
||||
$response = [
|
||||
'status' => 200,
|
||||
'error' => null,
|
||||
'messages' => [
|
||||
'success' => 'Data deleted'
|
||||
]
|
||||
];
|
||||
return $this->respond($response);
|
||||
}
|
||||
}
|
||||
56
ci4/app/Filters/Cors.php
Normal file
56
ci4/app/Filters/Cors.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filters;
|
||||
|
||||
use CodeIgniter\Filters\FilterInterface;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
|
||||
class Cors implements FilterInterface
|
||||
{
|
||||
/*
|
||||
* Do whatever processing this filter needs to do.
|
||||
* By default it should not return anything during
|
||||
* normal execution. However, when an abnormal state
|
||||
* is found, it should return an instance of
|
||||
* CodeIgniter\HTTP\Response. If it does, script
|
||||
* execution will end and that Response will be
|
||||
* sent back to the client, allowing for error pages,
|
||||
* redirects, etc.
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @param array|null $arguments
|
||||
*
|
||||
* @return RequestInterface|ResponseInterface|string|void
|
||||
*/
|
||||
public function before(RequestInterface $request, $arguments = null)
|
||||
{
|
||||
|
||||
header("Access-Control-Allow-Origin: https://app.imprimelibros.com");
|
||||
header("Access-Control-Allow-Headers: X-API-KEY, Origin,X-Requested-With, Content-Type, Accept, Access-Control-Requested-Method, Authorization");
|
||||
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PATCH, PUT, DELETE");
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
if($method == "OPTIONS"){
|
||||
die();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows After filters to inspect and modify the response
|
||||
* object as needed. This method does not allow any way
|
||||
* to stop execution of other after filters, short of
|
||||
* throwing an Exception or Error.
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @param ResponseInterface $response
|
||||
* @param array|null $arguments
|
||||
*
|
||||
* @return ResponseInterface|void
|
||||
*/
|
||||
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
46
ci4/app/Models/API/ItemModel.php
Normal file
46
ci4/app/Models/API/ItemModel.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\API;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ItemModel extends Model
|
||||
{
|
||||
protected $table = 'items';
|
||||
protected $primaryKey = 'id';
|
||||
protected $useAutoIncrement = true;
|
||||
protected $returnType = 'array';
|
||||
protected $useSoftDeletes = false;
|
||||
protected $protectFields = true;
|
||||
protected $allowedFields = ['title','price'];
|
||||
|
||||
protected bool $allowEmptyInserts = false;
|
||||
protected bool $updateOnlyChanged = true;
|
||||
|
||||
protected array $casts = [];
|
||||
protected array $castHandlers = [];
|
||||
|
||||
// Dates
|
||||
protected $useTimestamps = false;
|
||||
protected $dateFormat = 'datetime';
|
||||
protected $createdField = 'created_at';
|
||||
protected $updatedField = 'updated_at';
|
||||
protected $deletedField = 'deleted_at';
|
||||
|
||||
// Validation
|
||||
protected $validationRules = [];
|
||||
protected $validationMessages = [];
|
||||
protected $skipValidation = false;
|
||||
protected $cleanValidationRules = true;
|
||||
|
||||
// Callbacks
|
||||
protected $allowCallbacks = true;
|
||||
protected $beforeInsert = [];
|
||||
protected $afterInsert = [];
|
||||
protected $beforeUpdate = [];
|
||||
protected $afterUpdate = [];
|
||||
protected $beforeFind = [];
|
||||
protected $afterFind = [];
|
||||
protected $beforeDelete = [];
|
||||
protected $afterDelete = [];
|
||||
}
|
||||
Reference in New Issue
Block a user