روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ علی طباطبایی
پیاده سازی فیلتر برای پاسخ به درخواست
جامعه پی اچ پی ایجاد شده در ۱۴ دی ۱۴۰۰

سلام من کد‌های فیلتر رو به این صورت پیاده سازی کردم که ابتدا تو بدنه درخواست از کاربر فیلد هایی که میخواد براش ارسال بشه رو دریافت کردم طبق الگوی زیر :

{
    "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};";

سوالم این بود غیر از این روش، آیا راهی هست برای این که کدهارو بهینه‌تر بنویسم یا خیر ؟

سلام.

با الگوهای طراحی مثل mvc میتونید ساختار بهتری برای پروژه هاتون ایجاد کنید و لایه دیتابیس و ویو و کنترلر رو از هم جدا کنید.

یعنی کدهای مربوط به دیتابیس در کلاس مربوط به خودش، کدهای اکشن خاص در کنترلر و دستوراتی که خروجی رو میسازن در کلاس مخصوص view.

بهترین پاسخ
محسن موحد ۱۴ دی ۱۴۰۰، ۱۵:۵۸