سلام من کدهای فیلتر رو به این صورت پیاده سازی کردم که ابتدا تو بدنه درخواست از کاربر فیلد هایی که میخواد براش ارسال بشه رو دریافت کردم طبق الگوی زیر :
{
"0": "name",
"1": "id"
}
و توی فایل index.php مربوط به endpoint، داده رو به این صورت ایجاد کردم تا فرستاده بشه به متد getCity که در این متد هم تابع getCities از فایل iran.php صدا زده میشه
$city_service = new CityService();
$request_body = json_decode(file_get_contents("php://input"),true);
#make request data
$request_data = [
"province_id" => $Province_id,
"pagesize" => $_GET['pagesize'] ?? null,
"page"=> $_GET['page'] ?? null,
"fields"=> $request_body ?? '*'
];
#----------------------------------------------------------------
#send request
$response = $city_service->getCity($request_data);
#----------------------------------------------------------------
و توی تابع getCities برای چک کردن ولید بودن مقادیری که کاربر ارسال کرده کدهای زیر رو نوشتم
$fields = $data["fields"] ?? '*';
$sqlField = ($fields == "*") ? $fields : '';
#fields validation
if($fields != "*"){
$validFields = array("name","id","province_id");
foreach ($fields as $key => $value) {
if (!in_array($value, $validFields)) {
$sqlField = "*";
break;
}
$sqlField .= $value . " ";
}
$sqlField = str_replace(" ",",",rtrim($sqlField));
}
$sql = "select {$sqlField} from city {$where} {$limit};";
سوالم این بود غیر از این روش، آیا راهی هست برای این که کدهارو بهینهتر بنویسم یا خیر ؟