أطر عمل PHP
لكل إطار عمل PHP مهمة يتقنها أكثر من غيرها.
نبني التطبيقات وننقذها ونستضيفها بكلٍّ منها — وبـ PHP الخام التي لم يكن لها إطار عمل قط — مع فريق يكتب PHP منذ خمسة وعشرين عامًا.
أي إطار عمل يناسب مشروعك
أجب عن سؤالين. ينتهي كل مسار حيث كنا سنبدأ — ويذكر متى كنا سنختار شيئًا آخر.
ما الذي تبدأ منه؟
مشروع جديد
ما الأهم بالنسبة إليك؟
نظام كبير ستعمل عليه عدة فرق لسنوات
من أين سنبدأ
Symfony
إعدادات صريحة، وحاوية لحقن التبعيات، وإصدارات بدعم طويل الأمد، وDoctrine للبيانات. وتظل البنية متماسكة حين ينضم المطوّر الخامس.
وفكّر أيضًا في Laminas إذا كانت الشركة تشغّل شيفرة Zend Framework بالفعل.
منتج يجب إطلاقه قريبًا، بفريق صغير
من أين سنبدأ
Laravel
المصادقة والطوابير والبريد والجدولة وORM معبِّر جاهزة من البداية، باصطلاح واحد لكل ذلك.
Laravel في EGPHPواجهة API أو خدمة صغيرة لمهمة واحدة
من أين سنبدأ
Slim
التوجيه والطبقات الوسيطة وطلبات PSR-7 القياسية، ولا شيء لم تطلبه. أنت تختار طبقة قاعدة البيانات والحاوية.
إذا كانت الواجهة ستكبر لتصبح منتجًا كاملًا، فإن Laravel أو Symfony يوفّر عليك إعادة البناء لاحقًا.
تطبيق صغير على خادم متواضع
من أين سنبدأ
CodeIgniter
بصمة صغيرة، وإعدادات قليلة، وتوثيق واضح. ويعمل جيدًا حيث تكون الموارد محدودة.
شاشات بيانات كثيرة، تُبنى بسرعة من قاعدة البيانات
من أين سنبدأ
Yii · CakePHP
يولّد Yii النماذج وشاشات CRUD عبر Gii، وينشئها CakePHP انطلاقًا من اصطلاحاته. وكلاهما يحوّل المخطط إلى شاشات عاملة بسرعة.
أقل عبء لإطار العمل في كل طلب
من أين سنبدأ
Phalcon
إطار العمل امتداد مُترجَم بلغة C، لذا لا يعمل إلا القليل جدًا من PHP في كل طلب. ويحتاج إلى تثبيت هذا الامتداد على الخادم — ونحن نثبّته على خوادمنا.
كثير من الاستضافات المشتركة لا تسمح بامتدادات PHP. تحقّق من ذلك قبل أن تختاره.
تطبيق موجود بالفعل
على ماذا بُني؟
PHP خام بلا إطار عمل، أو إصدار PHP قديم جدًا
من أين سنبدأ
الإنقاذ أولًا
نجعله آمنًا ومحدَّثًا قبل أي شيء آخر، ثم نقرر معًا إن كان إطار العمل يستحق.
كيف يجري الإنقاذمبني على إطار عمل، ويعمل
من أين سنبدأ
الإبقاء على إطار العمل
نرقّيه ونؤمّنه ونوسّعه بإطار العمل الذي كُتب به. إعادة الكتابة هي الملاذ الأخير، لا الخيار الأول.
مبني على إطار عمل تريد مغادرته
من أين سنبدأ
الانتقال على مراحل
يعمل التطبيقان القديم والجديد جنبًا إلى جنب، وتنتقل المسارات واحدًا تلو الآخر بينما يستمر العمل.
كيف يجري الانتقالجنبًا إلى جنب
ما هو كل إطار عمل، وفيمَ يتفوق، ومتى نتردد في اختياره. لا أحد منها خاطئ؛ فكلٌّ منها مناسب لمهمة مختلفة.
| إطار العمل | ما هو | طبقة البيانات | أقوى ما فيه | أعد النظر إذا |
|---|---|---|---|---|
| Symfony | إطار عمل متكامل ومكوّنات قابلة لإعادة الاستخدام | Doctrine ORM | الأنظمة الكبيرة طويلة العمر، مع إصدارات بدعم طويل الأمد | موقع صغير يجب إطلاقه هذا الأسبوع |
| Laravel | إطار عمل متكامل | Eloquent | إطلاق منتج بسرعة، مع طوابير ومصادقة وبريد مدمجة | تريد ربط كل جزء بشكل صريح |
| CodeIgniter | إطار عمل متكامل خفيف | منشئ استعلامات ونماذج بسيطة | بصمة صغيرة على خوادم متواضعة | يحتاج المشروع إلى منظومة كبيرة من الحزم |
| Yii | إطار عمل متكامل | Active Record | شاشات كثيفة البيانات تُولَّد عبر Gii، والتخزين المؤقت | فريقك جديد عليه، ومجتمعه أصغر |
| CakePHP | إطار عمل متكامل | CakePHP ORM | الاصطلاح بدل الإعداد، وشيفرة تُولَّد من المخطط | التطبيق يصطدم باصطلاحاته في كل خطوة |
| Laminas | مكوّنات وأطر عمل MVC وطبقات وسيطة؛ خليفة Zend Framework | laminas-db أو Doctrine | أنظمة الأعمال المبنية أصلًا على Zend Framework | مشروع جديد صغير يريد التحرك بسرعة |
| Slim | إطار عمل مصغّر | لا شيء مدمج — الاختيار لك | واجهات API والخدمات الصغيرة | يحتاج التطبيق إلى الجلسات والنماذج ولوحة إدارة من اليوم الأول |
| Phalcon | إطار عمل متكامل يُقدَّم كامتداد بلغة C | Phalcon ORM مع PHQL | عبء منخفض جدًا لكل طلب | لا يمكن لاستضافتك تثبيت امتدادات PHP |
Laravel نفسه مبني على عدة مكوّنات من Symfony، ومعظم هذه الأطر تتشارك معايير PSR نفسها — فنقل الشيفرة بينها أقل جهدًا مما يبدو.
شيفرة PHP القديمة، نعيدها إلى حالة جيدة
لا تزال شيفرة كُتبت قبل سنوات تدرّ المال على كثير من الشركات. نجعلها آمنة ومحدَّثة دون إيقافها.
- $id = $_GET['id'];- $r = mysql_query("SELECT * FROM orders WHERE id = $id");- $order = mysql_fetch_assoc($r);+ $stmt = $pdo->prepare('SELECT * FROM orders WHERE id = ?');+ $stmt->execute([(int) $_GET['id']]);+ $order = $stmt->fetch(PDO::FETCH_ASSOC);
نقرؤه ونشغّله
نسخة من التطبيق تعمل على خادم حديث، وقائمة مكتوبة بما يتعطل.
اختبارات حول ما يعمل
اختبارات تسجّل ما تفعله الصفحات اليوم، فيُكتشف فورًا أي تغيير يعطّل إحداها.
ترقية PHP على مراحل
إصدارًا واحدًا في كل مرة، مع Rector للتغييرات الآلية وPHPStan لاكتشاف ما فاته.
الأمان أولًا
استعلامات مُعدَّة مسبقًا، ومخرجات مُهرَّبة، وكلمات مرور يُعاد تجزئتها، وإحكام الجلسات والملفات المرفوعة.
ثم إطار عمل، إن كان مجديًا
تدخل الميزات الجديدة في إطار عمل بجانب الشيفرة القديمة، وتنتقل الصفحات القديمة إليه كلما جرى العمل عليها.
الانتقال بين أطر العمل، مسارًا تلو الآخر
لا نوقف العمل من أجل إعادة الكتابة. يقف التطبيقان القديم والجديد خلف خادم ويب واحد، وينتقل كل مسار حين يجهز بديله.
-
/api/ordersالتطبيق الجديد نُقل -
/accountالتطبيق الجديد نُقل -
/checkoutالتطبيق الجديد قيد الاختبار -
/reportsالتطبيق القديم في الانتظار -
/adminالتطبيق القديم في الانتظار
التحويل سطر واحد لكل مسار
# nginx
location /api/orders { proxy_pass http://new; }
location /account { proxy_pass http://new; }
location /checkout { proxy_pass http://new; }
location / { proxy_pass http://old; }
المسار الذي يسيء التصرف يعود إلى التطبيق القديم بالتغيير نفسه ذي السطر الواحد، ريثما نصلحه.

أخبرنا بما تشغّله
يكفي للبدء إطار العمل وإصدار PHP وما يقلقك بشأنه. يُسعَّر كل مشروع بعد محادثة قصيرة.