اليوم، تحديت نفسي لتنفيذ نهج Laravel MVC (النموذج، العرض، وحدة التحكم) باستخدام PHP الفانيليا النقي. لمعالجة هذه المشكلة، استخدمت محرك القوالب Laravel Blade القياسي لجزء العرض من المشروع، ولكن بدون تثبيت Laravel نظرًا لأن مشروعي عبارة عن PHP فانيليا تمامًا. إليكم كيف حققت هذا التكامل؛
لقد بدأت بتثبيت حزمة تسمى Blade بواسطة JensSegers باستخدام أمر الملحن التالي:
composer require jenssegers/blade
تسمح هذه الحزمة باستخدام محرك القوالب Blade كحزمة مستقلة، مما يجعلها متوافقة مع أي مشروع PHP، وليس فقط Laravel.
بعد ذلك، قمت بتشغيل الأمر التالي لتحديث تبعية الإضاءة/العرض للحزمة إلى الإصدار 11.7.0، حيث أن الحزمة لا تعمل بشكل صحيح مع الإصدارات الأقل من 11.7.0:
composer require illuminate/view:11.7.0
ثم قمت بإنشاء قاعدة بيانات تسمى "pdotest" مع جدول يسمى "post" والذي يحتوي على عمودين "name" و"body". لقد قمت بملء هذا الجدول بالبيانات ("هذا هو اسم المنشور من قاعدة البيانات المعروضة باستخدام محرك قالب Blade"، "هذا نص النشر من قاعدة البيانات المعروضة باستخدام محرك قالب Blade") على التوالي وقمت بالاتصال به عن طريق إنشاء ملف Database.php في جذر جهازي المشروع ووضع الكود التالي:
host;dbname=$this->database",$this->username,$this->password); // $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $conn = $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $conn; } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); } } } ?>
بعد ذلك، قمت بإنشاء دليل يسمى "النماذج" لجميع عمليات معالجة قاعدة البيانات. داخل هذا الدليل، قمت بإنشاء ملف باسم Post.php للتعامل مع العمليات في جدول "النشر". ضمن هذا الملف، قمت بتعريف طريقة تسمى النشر لاسترداد منشور بواسطة معرفه، كما هو موضح أدناه:
conn = (new Database)->connect(); // Access directly (less secure) } public function getPost($id){ $stmt= "SELECT * FROM $this->table WHERE id = :id"; $stmt = $this->conn->prepare($stmt); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute(); return $result = $stmt->fetch(); } } ?>
بعد ذلك، قمت بإنشاء ملف Index.php ليكون بمثابة جهاز توجيه، حيث يقوم بتوصيل وحدة التحكم والعرض والنموذج. بداخله، قمت باستيراد جميع طرق العرض ومسارات ذاكرة التخزين المؤقت الخاصة بي، والتي سأقوم بإنشائها لوضع طرق عرض Blade وملفات ذاكرة التخزين المؤقت الخاصة بي. تم بعد ذلك تمرير هذه المسارات إلى فئة Blade، والتي تأتي مع حزمة Blade التي قمنا بتثبيتها في البداية. قمت بعد ذلك بتمرير مثيل Blade هذا إلى فئة PostController، التي سأقوم بإنشائها، واستدعيت طريقة النشر لتلك الفئة للحصول على منشور بمعرفها في المستقبل.
post(); ?>
ثم قمت بإنشاء دليل "وحدات التحكم" في جذر مشروعي. بداخله، تلقيت متغير Blade من ملف Index.php (جهاز التوجيه)، يسمى طريقة getPost لنموذج النشر للحصول على منشور حسب معرفه، وقمت بتمرير هذا المنشور إلى طريقة عرض Blade تسمى "الصفحة الرئيسية".
blade = $blade; } public function post(){ $post = (new Post)->getPost(1); echo $this->blade->render('homepage', ['post' => $post]); } } ?>
ثم قمت بإنشاء دليل يسمى "طرق العرض" وملف اسمه homepage.blade.php في جذر المشروع. داخل هذا الملف، قمت ببساطة بعرض اسم المنشور الذي تم تمريره من PostController، كما هو موضح أدناه:
{{$post['name']}}
أخيرًا، قمت بإنشاء دليل "ذاكرة التخزين المؤقت" في جذر مشروعي لتخزين ملفات ذاكرة التخزين المؤقت لـ Blade، مما يساعد على تحسين أداء مشروعي.
الآن، عندما تزور http://localhost/laravel-blade-without-laravel/index.php في متصفحك، سترى اسم المنشور معروضًا كـ "هذا اسم منشور من قاعدة البيانات معروض باستخدام قالب Blade" محرك."
نشكرك على متابعة هذا المنشور حول استخدام محرك القوالب Laravel Blade في مشروع PHP عادي. آمل أن يساعدك في رحلة التطوير الخاصة بك. اسمي وزيري علي أميري، مطور ويب من موشي، تنزانيا. أنا متخصص في العمل مع Laravel وأحب مساعدة الآخرين على البدء باستخدام هذا الإطار القوي. لا تتردد في التواصل معنا إذا كانت لديك أي أسئلة أو كنت بحاجة إلى مزيد من المساعدة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3