"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > خبير PHP | اكتب خدمات الويب المريحة باستخدام Slim Framework

خبير PHP | اكتب خدمات الويب المريحة باستخدام Slim Framework

نشر في 2025-04-14
تصفح:188

PHP Master | Writing a RESTful Web Service with Slim

استكشفت سلسلة SitePoint هذه مبادئ REST. توضح هذه المقالة بناء خدمة ويب مريحة باستخدام Slim ، وهي شركة PHP Micro-Framework مستوحاة من Sinatra (Ruby). إن طبيعة Slim خفيفة الوزن ، مع المكونات الأساسية مثل التوجيه ، ومعالجة الطلب/الاستجابة ، ودعم العرض الحد الأدنى ، تجعلها مثالية لواجهة برمجة تطبيقات REST البسيطة.

مفاهيم المفاتيح:

  • Slim هو PHP micro-framework مثالي للخدمات المريحة المباشرة ، ودعم PHP 5.2 وكلاهما أنماط برمجة (5.3) الوظيفية.
  • ROUPES MAP URIS إلى وظائف رد الاتصال لطرق HTTP محددة. يعالج Slim بكفاءة طرق متعددة لنفس URI.
  • يعرض مثال تطبيق إدارة المكتبة القائمة وإضافة وحذف وتحديث تفاصيل الكتاب عبر مكالمات خدمة الويب. Notorm ، مكتبة قاعدة بيانات PHP خفيفة الوزن ، معالجة تفاعل قاعدة البيانات.
  • استخدمت نقاط النهاية post () ، put () ، و حذف () طرق لإنشاء وتحديث وحذف سجلات الكتاب على التوالي.

تقديم Slim:

ابدأ بتنزيل Slim. يستخدم هذا المثال نمط 5.3. Create index.php :

get("/", function () {
    echo "

Hello Slim World

"; }); $app->run(); ?>

الوصول index.php في متصفحك يعرض "Hello Slim World". التحميل التلقائي النحيف الملفات اللازمة. يقبل المُنشئ النحيف التكوين (على سبيل المثال ، الوضع ، templates.path ، عرض ). الوضع يعين البيئة (التطوير/الإنتاج) ، و templates.path يحدد دليل القالب. يمكن أن تستبدل معالجات العرض المخصصة الافتراضي slim_view . مثال:

 "development",
    "TEMPLATES.PATH" => "./templates"
));
?>

إنشاء الطريق أمر بالغ الأهمية. ROUTES MAP URIS إلى وظائف رد الاتصال بناءً على طرق HTTP. يحمل النحافة الأولوية للطريق الأول المطابق ؛ الطلبات التي لا مثيل لها تؤدي إلى خطأ 404. بعد تحديد الطرق ، اتصل Run () لبدء التطبيق.

بناء خدمة مكتبة:

لننشئ خدمة إدارة المكتبة. Notorm يبسط تفاعل قاعدة البيانات (يتطلب مثيل PDO).

كتب قائمة:

يسرد نقطة النهاية هذه جميع الكتب بتنسيق JSON:

get("/books", function () use ($app, $db) {
    $books = array();
    foreach ($db->books() as $book) {
        $books[] = array(
            "id" => $book["id"],
            "title" => $book["title"],
            "author" => $book["author"],
            "summary" => $book["summary"]
        );
    }
    $app->response()->header("Content-Type", "application/json");
    echo json_encode($books);
});
// ... (rest of the code) ...

GET () مقالات الحصول على طلبات. استخدم يسمح بالوصول إلى المتغيرات الخارجية داخل الدالة المجهولة. يتم تعيين رأس الاستجابة على التطبيق

الحصول على تفاصيل كتاب:

استرداد كتاب بالمعرف:

get ("/book/: id" ، function ($ id) استخدم ($ app ، $ db) { $ app-> response ()-> header ("content-type" ، "application/json") ؛ $ book = $ db-> books ()-> حيث ("id" ، $ id) ؛ if ($ data = $ book-> fetch ()) { echo json_encode (صفيف ( "id" => $ Data ["id"] ، "العنوان" => $ بيانات ["العنوان"] ، "مؤلف" => $ بيانات ["مؤلف"] ، "ملخص" => $ بيانات ["ملخص"] ) ؛ } آخر { echo json_encode (صفيف ( "الحالة" => خطأ ، "الرسالة" => "معرف المعرف $ غير موجود" ) ؛ } }) ؛ // ... (بقية الكود) ...
get("/book/:id", function ($id) use ($app, $db) {
    $app->response()->header("Content-Type", "application/json");
    $book = $db->books()->where("id", $id);
    if ($data = $book->fetch()) {
        echo json_encode(array(
            "id" => $data["id"],
            "title" => $data["title"],
            "author" => $data["author"],
            "summary" => $data["summary"]
        ));
    } else {
        echo json_encode(array(
            "status" => false,
            "message" => "Book ID $id does not exist"
        ));
    }
});
// ... (rest of the code) ...
: معرف

إلى وظيفة رد الاتصال. المعلمات الاختيارية استخدم /book (/: id) . للحصول على معلمات اختيارية بدون وسيطات رد اتصال صريحة ، استخدم func_get_args () .

إضافة الكتب وتحريرها:

post ()

يضيف ، و put () تحديث الكتب:

post ("/book" ، function () use ($ app ، $ db) { $ app-> response ()-> header ("content-type" ، "application/json") ؛ $ book = $ app-> request ()-> post () ؛ $ result = $ db-> books-> insert ($ book) ؛ echo json_encode (Array ("id" => $ result ["id"])) ؛ }) ؛ $ app-> put ("/book/: id" ، function ($ id) استخدم ($ app ، $ db) { $ app-> response ()-> header ("content-type" ، "application/json") ؛ $ book = $ db-> books ()-> حيث ("id" ، $ id) ؛ if ($ book-> fetch ()) { $ post = $ app-> request ()-> put () ؛ $ result = $ book-> update ($ post) ؛ echo json_encode (صفيف ( "الحالة" => (Bool) $ نتيجة ، "رسالة" => "تم تحديث الكتاب بنجاح" ) ؛ } آخر { echo json_encode (صفيف ( "الحالة" => خطأ ، "الرسالة" => "معرف المعرف $ غير موجود" ) ؛ } }) ؛ // ... (بقية الكود) ...
post("/book", function () use ($app, $db) {
    $app->response()->header("Content-Type", "application/json");
    $book = $app->request()->post();
    $result = $db->books->insert($book);
    echo json_encode(array("id" => $result["id"]));
});

$app->put("/book/:id", function ($id) use ($app, $db) {
    $app->response()->header("Content-Type", "application/json");
    $book = $db->books()->where("id", $id);
    if ($book->fetch()) {
        $post = $app->request()->put();
        $result = $book->update($post);
        echo json_encode(array(
            "status" => (bool)$result,
            "message" => "Book updated successfully"
        ));
    } else {
        echo json_encode(array(
            "status" => false,
            "message" => "Book id $id does not exist"
        ));
    }
});
// ... (rest of the code) ...
$ app-> request ()-> post ()

و $ app-> request ()-> put () استرداد المنشور ووضع البيانات على التوالي. للحصول على طلبات PUT المستندة إلى المتصفح ، استخدم حقلًا مخفيًا _ الطريقة ذات قيمة "وضع" في النموذج الخاص بك.

حذف الكتب:

حذف كتاب بالمعرف:

delete ("/book/: id" ، function ($ id) استخدم ($ app ، $ db) { $ app-> response ()-> header ("content-type" ، "application/json") ؛ $ book = $ db-> books ()-> حيث ("id" ، $ id) ؛ if ($ book-> fetch ()) { $ result = $ book-> delete () ؛ echo json_encode (صفيف ( "الحالة" => صحيح ، "رسالة" => "تم حذف الكتاب بنجاح" ) ؛ } آخر { echo json_encode (صفيف ( "الحالة" => خطأ ، "الرسالة" => "معرف المعرف $ غير موجود" ) ؛ } }) ؛ // ... (بقية الكود) ...
delete("/book/:id", function ($id) use ($app, $db) {
    $app->response()->header("Content-Type", "application/json");
    $book = $db->books()->where("id", $id);
    if ($book->fetch()) {
        $result = $book->delete();
        echo json_encode(array(
            "status" => true,
            "message" => "Book deleted successfully"
        ));
    } else {
        echo json_encode(array(
            "status" => false,
            "message" => "Book id $id does not exist"
        ));
    }
});
// ... (rest of the code) ...
DELETE ()

تزيل سجل قاعدة البيانات. تتولى طريقة MAP () طرق HTTP متعددة على مسار واحد (غير مبين هنا).

خاتمة:

توضح هذه المقالة بناء خدمة ويب أساسية مع Slim. يجب أن يشمل المزيد من التطوير معالجة الأخطاء القوية والتحقق من صحة المدخلات. يمكن العثور على الرمز المصدر (غير المدرج هنا) على Github (الرابط غير المقدم في النص الأصلي). تم حذف قسم الأسئلة الشائعة في النص الأصلي لأنه يوفر معلومات أساسية متاحة بسهولة من خلال وثائق Slim.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3