Laravel / أساسي: أسس الطلب والبيانات / الدرس 3
المتحكمات ومدخل HTTP وملكية الاستجابة
ركز المتحكم على ترجمة الطلب لاستخدام مأذون واستجابة متماسكة. اجعل اعتماد المجال قابلاً للاختبار دون مسارات أو خدمات حقيقية.
في هذه الصفحة
أهداف الدرس
- فصل تحليل النقل من حساب المجال.
- استخدام حقن الاعتماد وكائن الاستجابة.
- تحديد ما لا يفحصه استدعاء المتحكم المحلي.
تنسيق الاستخدام بدلاً من امتلاك كل قاعدة
يتلقى المتحكم المدخل وينسق التحقق والإذن والسلوك ويعيد الاستجابة، ولا يجمع السعر والحفظ والعرض والإعادة كلها. تعبر خدمات صغيرة عن القواعد بمعاملات ونتائج. يظهر الحقن الاعتماد وتبقى مساعدات الطلب للنقل. لا تقرأ العام داخل الحساب. قد يكون المتحكم قصيراً وغير آمن بتعيين غير متحقق أو افتراض الإذن.
لا تستبدل سهولة Request المخطط
توفر Request الاستعلام والنموذج وJSON والترويسات والملفات والتفاوض. قد يسهل الدمج ويبقى المصدر والشكل مهمين. لا تفترض الأولي أو مرجعية السعر المخفي. تحقق من الحقول والأنواع والحدود والملكية قبل الأثر. يقرأ المثال قيمة مصطنعة معلومة ويحولها لقاعدة؛ يوضح الاستدعاء لا يوصي بـcast للخارج أو يستبدل Form Request.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
final class PriceRule { public function total(int $count): int { return 125 * $count; } }
final class QuoteController {
public function show(Illuminate\Http\Request $request, PriceRule $rule): Illuminate\Http\JsonResponse {
return new Illuminate\Http\JsonResponse(['total_cents' => $rule->total((int) $request->query('count'))]);
}
}
$container = new Illuminate\Container\Container();
$request = Illuminate\Http\Request::create('/quote?count=4', 'GET');
$response = $container->call([new QuoteController(), 'show'], ['request' => $request]);
echo $response->getContent(), PHP_EOL;
{"total_cents":500}
تحل الحاوية القاعدة دون وسيط أو سلسلة تحقق أو خادم.
إرجاع الاستجابة بدلاً من طباعة قطع
تجمع الاستجابة الحالة والترويسات والجسم لفحص القرار قبل الإرسال. تجنب echo بالخدمة لئلا تفسد JSON أو تسبق الكوكي والتحويل. اختر الحالة بالعقد لا200 لكل خطأ. لا تكشف الاستثناء أو الخاص لقابلية JSON. يحدد اختيار الحقول وموارد API العام ويربط حد الأخطاء الفشل بأمان.
التحويل قرار استجابة لا تحكم تلقائي
تصف الاستجابة الوجهة والحالة. ينهي إرجاعها مسار الفعل ولا يبرر بناؤها متابعة كتابة. تحقق من الوجهة لا مدخلاً اعتباطياً. يكشف الكائن الحالة وLocation بلا متصفح أو اتصال. تحتاج الرسائل والكوكي والجلسة والتنقل تكاملاً منفصلاً. ميّز الكائن من تبادل HTTP.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
$response = new Illuminate\Http\RedirectResponse('/courses', 303);
echo $response->getStatusCode(), PHP_EOL;
echo $response->headers->get('Location'), PHP_EOL;
303
/courses
يحفظ الكائن وجهة303 ولا يثبت تنقل المتصفح أو حفظ الوميض.
مراجعة الفعل في النجاح والفشل
اتبع السياق والتحقق والإذن والاستخدام والترجمة. ضع المعاملة بخدمة تحمي الكتابات ولا تجعل المنسق يعتمد حالة فجأة. لا تخفِ الحجز الجزئي أو الدفع المكرر برسالة آمنة. اختبر فئة الفشل والحالة النهائية، وأدرج الطريقة والمدخل والمستخدم والتفاوض بالتكامل. لا يثبت اختبار الطريقة تركيب المسار والوسيط.
الأخطاء الشائعة وإصلاحها
طباعة الخدمة داخل رد API
- لماذا يحدث؟
- خلط الحساب والإرسال بعقد خفي.
- كيف تصلحه؟
- إرجاع البيانات والإرسال عند HTTP.
- كيف تتجنب تكراره؟
- اختبار إخراج المساعد وتحليل الجسم.
قبول كمية مشوهة بتحويل صامت
- لماذا يحدث؟
- الخلط بين التحويل والتحقق.
- كيف تصلحه؟
- فحص الشكل والمجال قبل القواعد.
- كيف تتجنب تكراره؟
- إدراج المصفوفة والفراغ والمشوه.
ادعاء تغطية الوسيط باختبار فعل محلي
- لماذا يحدث؟
- إغفال خط HTTP بالاستدعاء المباشر.
- كيف تصلحه؟
- إضافة اختبار مسار معزول.
- كيف تتجنب تكراره؟
- تسمية الطبقة وافتراضات التكامل الغائبة.
اختبر فهمك
1. من أين يأتي سعر الدورة المرجعي؟
اعرض الحل المشروح
استخرجه من بيانات الخادم بعد الهوية والإذن؛ فالمخفي قرينة لا مبلغاً. مرر السنتات وافحص عدم تأثير سعر عميل متعارض.
2. أي دليل يلزم بعد نجاح الاستدعاء المحلي؟
اعرض الحل المشروح
اختبر مساراً معزولاً بحدوده وافحص الحالة والترويسات والجسم والآثار. يثبت المحلي الحقن والحساب فقط لاCSRF أو الكوكي.
أهم ما تعلمته
- تترجم المتحكمات الحدود وتنسق الاستخدام.
- يوفر كائن الاستجابة وفحص الحالة النهائية دليلين مختلفين.