လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> တောင်းဆိုမှုကိုအရာဝတ်ထုတရားစီရင်မှုစေရန် Controller သို့မဟုတ် Middleware () ကိုသုံးပါ

တောင်းဆိုမှုကိုအရာဝတ်ထုတရားစီရင်မှုစေရန် Controller သို့မဟုတ် Middleware () ကိုသုံးပါ

M66 2025-06-15

PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင်အထူးသဖြင့် Laravel ကဲ့သို့သောမူဘောင်များကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည်အ 0 တ်အထည်ချုပ်ပစ္စည်းများကိုထိန်းချုပ်သူများသို့မဟုတ်သတင်းများအတွက်တရားစွဲဆိုမှုများကိုပြုလုပ်လေ့ရှိသည်။ ကွဲပြားခြားနားသောယုတ္တိဗေဒအမျိုးအစားများကို API တောင်းဆိုမှုများသို့မဟုတ်စိတ်ကြိုက်တောင်းဆိုမှုများသင်တန်းများကဲ့သို့သောအချို့သောတောင်းဆိုမှုများကိုလုပ်ဆောင်ရန်လိုအပ်သည့်အခါဤမြင်ကွင်းသည်အထူးသဖြင့်များသောအားဖြင့်ဘုံဖြစ်သည်။ ဤဆောင်းပါးသည်တောင်းဆိုထားသောအရာဝတ်ထုအမျိုးအစားနှင့်ဤနည်းလမ်း၏အားသာချက်များကိုဆုံးဖြတ်ရန် IS_A () function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။

အဘယ်ကြောင့်သင်တောင်းဆိုချက်အရာဝတ်ထုအမျိုးအစားကိုဆုံးဖြတ်ရန်လိုအပ်သနည်း။

တောင်းဆိုမှုသည်တိကျသောစိတ်ကြိုက်တောင်းဆိုမှုအတန်းတစ်ခုအပေါ် အခြေခံ. နောက်ဆက်တွဲယုတ္တိဗေဒကိုဆက်လက်လုပ်ဆောင်ခြင်းရှိ, ဥပမာအားဖြင့်ကျွန်ုပ်တို့သည် Custom Request Class App \ တောင်းဆိုချက်များကိုဖန်တီးနိုင်သည်။ illuminate \ တောင်းဆိုချက်များကိုအမွေဆက်ခံရန် API တောင်းဆိုမှုများအတွက် apiquest ကိုဖန်တီး နိုင်သည်။ ဤကိစ္စတွင်ကျွန်ုပ်တို့သည်ပုံမှန်တောင်းဆိုမှုများနှင့် API တောင်းဆိုမှုများကို Middleware တွင်ခွဲခြားရန်လိုအပ်သည်။

is_a () အမျိုးအစားတရားစီရင်ခြင်းအတွက်အသုံးပြုပါ

PHP သည် Instanceof Operator နှင့် is_a () function ကိုအပါအ 0 င်အရာဝတ်ထုအမျိုးအစားများကိုအကဲဖြတ်ရန်နည်းလမ်းများစွာပေးသည်။ လုပ်ဆောင်ချက်နှစ်ခုသည်ဆင်တူသော်လည်း is_a () သည် ပိုမိုလွယ်ကူသော fendible function ခေါ်ဆိုမှုနည်းလမ်းကိုပေးသည်။

Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 is_a(object|string $object_or_class, string $class, bool $allow_string = false): bool

$ Allow_string ကို မှန်ကန်စွာ သတ်မှတ်ထားသည့်အခါအရာဝတ်ထုအစားအတန်းအမည်ရှိ string ကိုသင်ဖြတ်သွားနိုင်သည်။

နမူနာကုဒ် - Middleware ရှိတောင်းဆိုမှုအမျိုးအစားကိုဆုံးဖြတ်ပါ

ဤတွင်ရိုးရှင်းသော middleware ဥပမာတစ်ခုဖြစ်သည်။ ကျနော်တို့ is_a () apirequest အမျိုးအစားဖြစ်ကြောင်းဆုံးဖြတ်ရန် is_a () ကိုသုံးပါ။

 <?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Http\Requests\ApiRequest;

class CheckApiRequest
{
    public function handle(Request $request, Closure $next)
    {
        if (is_a($request, ApiRequest::class)) {
            // ဆန့်ကျင့်ဘက် API Execution Logic ကိုတောင်းဆိုပါ
            // ဥပမာအားဖြင့်, သစ်ထုတ်လုပ်ရေး、အထူး header အချက်အလက်များကို etc ထည့်ပါ။
        }

        return $next($request);
    }
}

အထက်ဖော်ပြပါကုဒ်တွင် 0 င်ရောက်လာသောတောင်းဆိုချက်သည် apirequest အတန်းအစား၏ဥပမာတစ်ခုဖြစ်ပါကတိကျသောယုတ္တိဗေဒကိုကွပ်မျက်နိုင်သည်။ ဒီလိုမှမဟုတ်ရင်လာမယ့်အရင်အဟုင်းသို့မဟုတ် controller ကိုတိုက်ရိုက်လွန်သွားလိမ့်မည်။

Controller တွင်ကြည့်ရှုပါ

တူညီသောယုတ္တိဗေဒသည် Controller နှင့်သက်ဆိုင်သည်။ ဥပမာအားဖြင့်, Controller နည်းလမ်းတွင် -

 public function store(Request $request)
{
    if (is_a($request, \App\Http\Requests\ApiRequest::class)) {
        // ကိုင်တွယ်ဖြေရှင်းသည် API တောင်းဆိုမှု၏ယုတ္တိဗေဒ
        return response()->json(['message' => 'ဒါ API မေးမြန်း']);
    }

    // 普通မေးမြန်း逻辑
    return view('form-submitted');
}

၎င်းသည် Controller နည်းလမ်းဖြင့်ကွဲပြားသောတောင်းဆိုမှုများကိုကွဲပြားသောတောင်းဆိုမှုများကိုလွယ်ကူစွာအကောင်အထည်ဖော်ရန်ခွင့်ပြုသည်။

သိကောင်းစရာများ - dynamically တရားသူကြီးလူတန်းစားအမည်ကြိုး

တခါတရံတွင်ကျွန်ုပ်တို့သည် configuration files များ (သို့) အခြားရင်းမြစ်များတွင်အတန်းအမည်များကိုပုံမှန်ရနိုင်ပြီး is_a () ၏အားသာချက်များကိုထင်ဟပ်နိုင်သည်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -

 $className = 'App\Http\Requests\ApiRequest';

if (is_a($request, $className)) {
    // 逻辑ကိုင်တွယ်ဖြေရှင်းသည်
}

Plug-in စနစ်များသို့မဟုတ် modular ဗိသုကာများကိုအကောင်အထည်ဖော်သောအခါ၎င်းသည်အလွန်လက်တွေ့ကျသည်။

အကျဉ်းချုပ်

တောင်းဆိုမှုအမျိုးအစားကိုဆုံးဖြတ်ရန် is_a () ကိုအသုံးပြုခြင်းသည်အထူးသဖြင့်တောင်းဆိုမှုအမျိုးအစားအတွက်မတူညီသောတုံ့ပြန်မှုများလိုအပ်သော middleware နှင့် controllers များ၌ရှင်းလင်းပြတ်သားစွာ, ပြောင်းလွယ်ပြင်လွယ်။ Instanceof , is_a () နှင့်နှိုင်းယှဉ်ပါက dynamic spararios များအတွက်ပိုမိုသင့်လျော်သည်နှင့်လည်းတူညီသောစွမ်းဆောင်ရည်နှင့်တိကျမှန်ကန်မှုရှိပါတယ်။

ဒီနည်းလမ်းကိုဆင်ခြင်တုံတရားကိုဆင်ခြင်တုံတရားကိုသုံးခြင်းအားဖြင့်, သင်ဤနည်းလမ်းကိုထပ်မံကျင့်သုံးလိုပါကကုဒ်များပိုမိုများပြားသောအသေးစိတ်အချက်အလက်များအတွက်အောက်ပါ link ကိုသင်ရည်ညွှန်းနိုင်သည်။