feat: Implement custom ResponseTrait with automatic empty string to null conversion
- Create App\Traits\ResponseTrait that wraps CodeIgniter\API\ResponseTrait - Add json_helper with convert_empty_strings_to_null() and prepare_json_response() functions - Replace all imports of CodeIgniter\API\ResponseTrait with App\Traits\ResponseTrait across all controllers - Add 'json' helper to BaseController helpers array - Ensure consistent API response formatting across the application
This commit is contained in:
parent
498afcc08c
commit
425595f5c0
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\AreaGeoModel;
|
use App\Models\AreaGeoModel;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
use Firebase\JWT\JWT;
|
use Firebase\JWT\JWT;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
use Firebase\JWT\JWT;
|
use Firebase\JWT\JWT;
|
||||||
|
|||||||
@ -30,12 +30,12 @@ abstract class BaseController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* An array of helpers to be loaded automatically upon
|
* An array of helpers to be loaded automatically upon
|
||||||
* class instantiation. These helpers will be available
|
* class instantiation. These will be available
|
||||||
* to all other controllers that extend BaseController.
|
* to all other controllers that extend BaseController.
|
||||||
*
|
*
|
||||||
* @var list<string>
|
* @var list<string>
|
||||||
*/
|
*/
|
||||||
protected $helpers = [];
|
protected $helpers = ['json'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Be sure to declare properties for any property fetch you initialized.
|
* Be sure to declare properties for any property fetch you initialized.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Contact;
|
namespace App\Controllers\Contact;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Contact\ContactModel;
|
use App\Models\Contact\ContactModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Contact;
|
namespace App\Controllers\Contact;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\Contact\MedicalSpecialtyModel;
|
use App\Models\Contact\MedicalSpecialtyModel;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Contact;
|
namespace App\Controllers\Contact;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\Contact\OccupationModel;
|
use App\Models\Contact\OccupationModel;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\CounterModel;
|
use App\Models\CounterModel;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
use Firebase\JWT\JWT;
|
use Firebase\JWT\JWT;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
class EdgeController extends Controller
|
class EdgeController extends Controller
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
use Firebase\JWT\JWT;
|
use Firebase\JWT\JWT;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\Location\LocationModel;
|
use App\Models\Location\LocationModel;
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\OrderTestModel;
|
use App\Models\OrderTestModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Organization;
|
namespace App\Controllers\Organization;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
|
|
||||||
use App\Models\Organization\AccountModel;
|
use App\Models\Organization\AccountModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Organization;
|
namespace App\Controllers\Organization;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
|
|
||||||
use App\Models\Organization\DepartmentModel;
|
use App\Models\Organization\DepartmentModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Organization;
|
namespace App\Controllers\Organization;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
|
|
||||||
use App\Models\Organization\DisciplineModel;
|
use App\Models\Organization\DisciplineModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Organization;
|
namespace App\Controllers\Organization;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
|
|
||||||
use App\Models\Organization\SiteModel;
|
use App\Models\Organization\SiteModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Organization;
|
namespace App\Controllers\Organization;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
|
|
||||||
use App\Models\Organization\WorkstationModel;
|
use App\Models\Organization\WorkstationModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\PatVisit\PatVisitModel;
|
use App\Models\PatVisit\PatVisitModel;
|
||||||
use App\Models\PatVisit\PatVisitADTModel;
|
use App\Models\PatVisit\PatVisitADTModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Patient;
|
namespace App\Controllers\Patient;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Patient\PatientModel;
|
use App\Models\Patient\PatientModel;
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
namespace App\Controllers\Result;
|
namespace App\Controllers\Result;
|
||||||
|
|
||||||
use App\Models\ValueSet\ValueSetModel;
|
use App\Models\ValueSet\ValueSetModel;
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
|
|
||||||
class ResultValueSetController extends \CodeIgniter\Controller
|
class ResultValueSetController extends \CodeIgniter\Controller
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
use Firebase\JWT\JWT;
|
use Firebase\JWT\JWT;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
||||||
use Firebase\JWT\JWT;
|
use Firebase\JWT\JWT;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Specimen;
|
namespace App\Controllers\Specimen;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Specimen\ContainerDefModel;
|
use App\Models\Specimen\ContainerDefModel;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Specimen;
|
namespace App\Controllers\Specimen;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Specimen\SpecimenCollectionModel;
|
use App\Models\Specimen\SpecimenCollectionModel;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Specimen;
|
namespace App\Controllers\Specimen;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Specimen\SpecimenModel;
|
use App\Models\Specimen\SpecimenModel;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Specimen;
|
namespace App\Controllers\Specimen;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\Specimen\SpecimenPrepModel;
|
use App\Models\Specimen\SpecimenPrepModel;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Controllers\Specimen;
|
namespace App\Controllers\Specimen;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Specimen\SpecimenStatusModel;
|
use App\Models\Specimen\SpecimenStatusModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Test;
|
namespace App\Controllers\Test;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Patient\PatientModel;
|
use App\Models\Patient\PatientModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers\Test;
|
namespace App\Controllers\Test;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\Test\TestMapModel;
|
use App\Models\Test\TestMapModel;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ namespace App\Controllers;
|
|||||||
|
|
||||||
use App\Libraries\ValueSet;
|
use App\Libraries\ValueSet;
|
||||||
use App\Models\ValueSet\ValueSetModel;
|
use App\Models\ValueSet\ValueSetModel;
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
|
|
||||||
class ValueSetController extends \CodeIgniter\Controller
|
class ValueSetController extends \CodeIgniter\Controller
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use App\Models\ValueSet\ValueSetDefModel;
|
use App\Models\ValueSet\ValueSetDefModel;
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
|
|
||||||
class ValueSetDefController extends \CodeIgniter\Controller
|
class ValueSetDefController extends \CodeIgniter\Controller
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\API\ResponseTrait;
|
use App\Traits\ResponseTrait;
|
||||||
use App\Controllers\BaseController;
|
use App\Controllers\BaseController;
|
||||||
use App\Models\SyncCRM\ZonesModel;
|
use App\Models\SyncCRM\ZonesModel;
|
||||||
|
|
||||||
|
|||||||
47
app/Helpers/json_helper.php
Normal file
47
app/Helpers/json_helper.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!function_exists('convert_empty_strings_to_null')) {
|
||||||
|
/**
|
||||||
|
* Recursively convert empty strings to null in arrays or objects
|
||||||
|
*
|
||||||
|
* @param mixed $data The data to process (array, object, or scalar)
|
||||||
|
* @return mixed The processed data with empty strings converted to null
|
||||||
|
*/
|
||||||
|
function convert_empty_strings_to_null($data) {
|
||||||
|
if (is_array($data)) {
|
||||||
|
foreach ($data as $key => $value) {
|
||||||
|
if (is_array($value)) {
|
||||||
|
$data[$key] = convert_empty_strings_to_null($value);
|
||||||
|
} elseif (is_object($value)) {
|
||||||
|
$data[$key] = convert_empty_strings_to_null($value);
|
||||||
|
} elseif ($value === '') {
|
||||||
|
$data[$key] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif (is_object($data)) {
|
||||||
|
foreach ($data as $key => $value) {
|
||||||
|
if (is_array($value)) {
|
||||||
|
$data->$key = convert_empty_strings_to_null($value);
|
||||||
|
} elseif (is_object($value)) {
|
||||||
|
$data->$key = convert_empty_strings_to_null($value);
|
||||||
|
} elseif ($value === '') {
|
||||||
|
$data->$key = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('prepare_json_response')) {
|
||||||
|
/**
|
||||||
|
* Prepare data for JSON response by converting empty strings to null
|
||||||
|
* This is a convenience wrapper around convert_empty_strings_to_null
|
||||||
|
*
|
||||||
|
* @param mixed $data The data to prepare for JSON response
|
||||||
|
* @return mixed The processed data ready for JSON encoding
|
||||||
|
*/
|
||||||
|
function prepare_json_response($data) {
|
||||||
|
return convert_empty_strings_to_null($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
31
app/Traits/ResponseTrait.php
Normal file
31
app/Traits/ResponseTrait.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Traits;
|
||||||
|
|
||||||
|
use CodeIgniter\API\ResponseTrait as BaseResponseTrait;
|
||||||
|
use CodeIgniter\HTTP\ResponseInterface;
|
||||||
|
|
||||||
|
trait ResponseTrait
|
||||||
|
{
|
||||||
|
use BaseResponseTrait {
|
||||||
|
respond as baseRespond;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a response with automatic conversion of empty strings to null
|
||||||
|
*
|
||||||
|
* @param mixed $data
|
||||||
|
* @param int $status
|
||||||
|
* @param string $message
|
||||||
|
* @return ResponseInterface
|
||||||
|
*/
|
||||||
|
public function respond($data = null, int $status = 200, string $message = '')
|
||||||
|
{
|
||||||
|
// Convert empty strings to null in the data
|
||||||
|
if ($data !== null && (is_array($data) || is_object($data))) {
|
||||||
|
$data = convert_empty_strings_to_null($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->baseRespond($data, $status, $message);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user