إنشاء وتشغيل مشروع ThinkPHP 8 في ServBay
يرشدك هذا المقال خطوة بخطوة لاستخدام ServBay — بيئة تطوير ويب محلية قوية — لإنشاء وإعداد وتشغيل مشروع PHP خاص بك باستخدام إطار عمل ThinkPHP 8. إذ يوفر ServBay بيئة PHP مُعدة مسبقًا، وخوادم ويب (Caddy أو Nginx) بالإضافة إلى قواعد بيانات متعددة، مما يبسّط جدًا عملية بناء مشروعك المحلي باستخدام ThinkPHP.
ما هو ThinkPHP؟
ThinkPHP هو إطار عمل PHP مفتوح المصدر سريع وسهل الاستخدام، انطلق من الصين ويعتمد على البرمجة الكائنية. يستلهم الإطار مبدأَي البساطة والكفاءة، ويوفر مجموعة أدوات شاملة لبناء تطبيقات ويب حديثة، ويتميّز بإمكانية الاستخدام السلس، والدعم المجتمعي القوي، ومزايا مثل ORM قوي، ونظام توجيه ديناميكي، ومحرك قوالب مدمج، ودعم الكاش وغير ذلك. يُعد ThinkPHP خيارًا شائعًا بين مطوري PHP في الصين ويوفر بنية قوية لتطوير البرمجيات.
أبرز ميزات وفوائد ThinkPHP
- تصميم بسيط وكفاءة عالية: بنيته واضحة وسهلة الفهم والصيانة، ما يرفع الإنتاجية.
- ميزات متكاملة: توفر جميع المكونات المطلوبة لتطوير الويب مثل هيكلة MVC وORM ومحرك القوالب والكاش وإدارة الجلسات والمصادقة وحماية النماذج.
- ORM قوي: يختصر عمليات التعامل مع قواعد البيانات بمنهج كائني سهل وفعال.
- نظام توجيه مرن: يدعم تعريفات توجيه مختلفة ليناسب أي بنية URL معقدة.
- منظومة ديناميكية غنية: مجتمع نشط ومكتبات توسعة كثيرة تدعم المطورين.
- تحديثات مستمرة: يتم تطوير الإطار بسرعة كبيرة ليتماشى مع تطور لغة PHP، وتوجهات تطوير الويب.
ThinkPHP مناسب لتطوير المواقع والتطبيقات الإلكترونية بمختلف الأحجام، من الصغيرة إلى مشاريع المؤسسات الكبرى.
إعداد مشروع ThinkPHP 8 باستخدام ServBay
يعد ServBay خيارًا مثاليًا لتطوير ThinkPHP 8 محليًا ويوفر ما يلي:
- تثبيت مسبق لإصدارات متعددة من PHP وإضافاته الشائعة.
- خادم ويب داخلي (Caddy أو Nginx) لسهولة إعداد المواقع.
- دمج قواعد بيانات مثل MySQL وPostgreSQL وMongoDB وRedis وMemcached.
- مدير الحزم Composer مدمج وجاهز للعمل.
ستتعلم في هذا الدليل كيف تستفيد من هذه الوظائف لبناء مشروعك باستخدام ThinkPHP 8 بسرعة.
المتطلبات الأساسية
قبل البدء، تأكد من:
- أنك قد حمّلت وركّبت ServBay على macOS أو Windows.
- يعمل ServBay، وتم تشغيل إصدار PHP المطلوب (ThinkPHP 8 يتطلب PHP 8.0 أو أعلى) وأي قواعد بيانات تحتاجها (MySQL، PostgreSQL، Redis، Memcached...). يمكنك التأكد وتشغيل الخدمات من علامة تبويب "الحزم" في لوحة تحكم ServBay.
إنشاء مشروع ThinkPHP
يوصى بتخزين ملفات موقعك المحلي جميعها ضمن المجلد /Applications/ServBay/www
لتسهيل إدارة المواقع بواسطة ServBay.
تأكد من توفر Composer
ServBay يأتي مُرفقًا بـ Composer مُثبت مسبقًا، ولا تحتاج غالبًا لإعداد إضافي. تحقق من تثبيته عبر تنفيذ الأمر التالي في محطة ServBay:
composer --version
إنشاء مشروع ThinkPHP via Composer
افتح الطرفية في macOS، وادخل لمجلد المواقع في ServBay، ثم نفذ:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2سينشأ مجلد جديد باسم
servbay-thinkphp-app
ضمن/Applications/ServBay/www
، ويحمّل فيه ملفات ThinkPHP 8 الأساسية وجميع الاعتمادات.الانتقال لمجلد المشروع
بعد الإنشاء، ادخل المجلد الجديد:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
تهيئة إعدادات المشروع
بعد الإنشاء، عليك ضبط بعض الإعدادات الأساسية.
ضبط إعدادات قاعدة البيانات
تكوين الاتصال بقاعدة البيانات يتم غالبًا في الملف
config/database.php
. عدّل هذا الملف حسب نوع قاعدة البيانات التي فعّلتها في ServBay.مثال على إعداد اتصال MySQL الافتراضي في ServBay:
php<?php // config/database.php return [ // الاتصال الافتراضي 'default' => env('database.driver', 'mysql'), // إعدادات الاتصال بكل قاعدة بيانات 'connections' => [ 'mysql' => [ // نوع القاعدة 'type' => 'mysql', // عنوان الخادم 'hostname' => env('database.hostname', '127.0.0.1'), // اسم القاعدة 'database' => env('database.database', 'servbay_thinkphp_app'), // يُنصح بإنشاء قاعدة منفصلة للمشروع // اسم المستخدم 'username' => env('database.username', 'root'), // كلمة المرور 'password' => env('database.password', 'password'), // كلمة مرور ServBay الافتراضية — للاستخدام المحلي فقط! // المنفذ 'hostport' => env('database.hostport', '3306'), // ... إعدادات أخرى ... ], // ... إعدادات قواعد أخرى ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27ملاحظات هامة:
- غيّر قيمة
database
إلى اسم القاعدة الفعلي التي أنشأتها للمشروع (يمكنك إنشاؤها من phpMyAdmin أو Adminer ضمن ServBay مثلا). - كلمة مرور المستخدم الافتراضية هي
password
للمستخدمroot
، فقط للتطوير المحلي. لا تستخدمها أبدًا في الإنتاج! احرص دومًا على تعيين كلمة مرور قوية وصلاحيات محدودة في بيئة الإنتاج. - إذا كنت تستخدم ملف
.env
لإدارة المتغيرات البيئية، تأكد أنه يغطي إعدادات الاتصال وقيم الإعداد الافتراضية.
- غيّر قيمة
إعداد خادم الويب
ملف الدخول الأساسي لإطار ThinkPHP هو public/index.php
، ويحتاج لنظام إعادة كتابة الروابط (Rewrite) لمعالجة التوجيهات. نظرًا لأن قواعد توجيه ThinkPHP تختلف عن روابط الملفات الثابتة، يجب استخدام قواعد إعادة الكتابة المدمجة في ServBay.
من إعداد الموقع، اختر من قائمة قواعد إعادة الكتابة ThinkPHP
ثم احفظ التغييرات.
لشرح مفصّل عن هذه الإعدادات، راجع إضافة أول موقع في خدمة ServBay.
إضافة كود تجريبي
لاختبار إعداد الموقع وفعالية التوجيهات في ThinkPHP، يمكنك إضافة توجيه وتحكم بسيط في المشروع.
عدّل الملف /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
، وأضف الكود التالي لتعريف توجيه GET بسيط:
php
<?php
// route/app.php
use think\facade\Route;
// تعريف توجيه servbay — عند الدخول على /servbay ينفذ الدالة
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... توجيهات أخرى ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
الدخول للموقع
بعد الانتهاء، افتح المستعرض لديك، وادخل على الرابط التالي أو ما يقابله في إعدادك المحلي:
https://thinkphp.servbay.demo/servbay
إذا ظهرت رسالة Hello ServBay!
فهذا يعني أن مشروعك يعمل بنجاح ضمن بيئة ServBay، وأن إعدادات خادم الويب وPHP-FPM فعالة.
مثال على قواعد بيانات NoSQL
يُدمج ServBay قواعد NoSQL مثل Memcached وRedis (وممكن MongoDB). يوفر ThinkPHP طبقة تجريد للكاش تسهّل عمل كاش مخدّم باستخدام هذه الخدمات.
مثال Memcached
تفعيل إضافة Memcached
Memcached مدمج ضمن حزمة ServBay لـPHP. فقط تأكد أن خدمة Memcached فعالة من لوحة تحكم ServBay.
ضبط الكاش على Memcached
عدّل ملف
config/cache.php
ليستخدم ThinkPHP الكاش من خلال Memcached:php<?php // config/cache.php return [ // محرك الكاش الافتراضي 'default' => env('cache.driver', 'memcached'), // إعدادات الاتصال بالكاش 'stores' => [ 'memcached' => [ // نوع الكاش 'type' => 'memcached', // عنوان المخدّم 'host' => '127.0.0.1', // العنوان الافتراضي لـ Memcached على ServBay 'port' => 11211, // المنفذ الافتراضي لـ Memcached 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... إعدادات كاش أخرى ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23استخدام كاش Memcached في الكود
من خلال التحكم أو الكولباك الخاص بالتوجيه، استعمل واجهة
Cache
في ThinkPHP:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // تعيين كاش بصلاحية 600 ثانية Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // استرجاع الكاش $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13افتح
https://thinkphp.servbay.demo/memcached-example
لاختبار التخزين المؤقت.
مثال Redis
تفعيل إضافة Redis
Redis مدمج في حزمة ServBay لـPHP. فقط تحقق من تشغيل خدمة Redis ضمن لوحة التحكم.
ضبط الكاش على Redis
عدّل ملف
config/cache.php
ليستخدم ThinkPHP الكاش بواسطة Redis:php<?php // config/cache.php return [ // محرك الكاش الافتراضي 'default' => env('cache.driver', 'redis'), // إعدادات الاتصال بالكاش 'stores' => [ 'redis' => [ // نوع الكاش 'type' => 'redis', // عنوان المخدّم 'host' => env('cache.host', '127.0.0.1'), // العنوان الافتراضي لـ Redis على ServBay // المنفذ 'port' => env('cache.port', 6379), // المنفذ الافتراضي لـ Redis // كلمة السر (افتراضيًا بدون كلمة مرور في ServBay) 'password' => env('cache.password', ''), // بدون كلمة مرور افتراضية 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... إعدادات كاش أخرى ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27تنبيه: يكون Redis غالبًا بدون كلمة مرور افتراضية في ServBay. إذا عينتها يدويًا، يجب تحديث الحقل
password
.استخدام كاش Redis في الكود
من داخل التحكم أو التوجيه، استخدم
Cache
في ThinkPHP:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // تعيين قيمة دائمة (أو استخدام صلاحية زمنية) Cache::set('my_redis_key', 'Hello from Redis!'); // جلب القيمة من Redis $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13افتح
https://thinkphp.servbay.demo/redis-example
لاختبار العملية.
مثال قواعد البيانات العلائقية
ServBay يدمج قواعد بيانات رائجة مثل MySQL وPostgreSQL. يوفر ORM في ThinkPHP وسيلة مرنة للتعامل مع هذه القواعد.
استخدام أداة الترحيل Migration
إدارة بنية قواعد البيانات عبر أداة الترحيل تسهّل التعاون والنسخة في المشاريع الجماعية.
تثبيت أداة الترحيل
من مجلد المشروع، ثبت إضافة الترحيل باستخدام Composer:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2إنشاء ملف ترحيل جديد
عبر أمر سطر ThinkPHP، أنشئ ملف Migration لبناء جدول المستخدمين مثلًا:
bashphp think migrate:create CreateUserTable
1سيظهر ملف جديد في مجلد
database/migrations
اسمه يحوي طابع زمني واسم الإجراء، مثل20231027100000_create_user_table.php
.تحرير ملف الترحيل
افتح ملف الترحيل الجديد، وعرّف بنية جدول
users
في دالةup()
أوchange()
:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * طريقة التحويل — هنا تُعرف البنية ويمكن عكسها عند الإرجاع. * اطلع على توثيق http://docs.phinx.org/en/latest/migrations.html#the-change-method */ public function change() { // أنشئ الجدول بعمود الاسم والايميل $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'اسم المستخدم']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'عنوان البريد']) ->addIndex(['email'], ['unique' => true]) // إضافة فهرس فريد ->addTimestamps() // إضافة حقلي الإنشاء والتعديل ->create(); // تنفيذ الإنشاء } // لو رغبت، عرف up() وdown() بدل change() /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'اسم المستخدم']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'عنوان البريد']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $this->dropTable('users'); } */ }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41تنفيذ الترحيل وإنشاء الجدول
عد لمجلد المشروع الرئيسي، ونفذ الأمر التالي:
bashphp think migrate:run
1سيُنشئ جدول
users
في القاعدة بعد نجاح العملية.
مثال MySQL
بافتراض أنك فعّلت خدمة MySQL وأعددت الاتصال في config/database.php
كما ورد سابقًا.
ضبط الاتصال
راجع إعداد الاتصال بمثالك في الأعلى، وتأكد من صحة المعلومات.
إدخال بيانات مستخدم جديد عبر الكود
استخدم واجهة
Db
أو ORM لإدخال بيانات مستخدم كما يلي:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => 'demo@servbay.demo', // عنوان بريد تجريبي باسم الخدمة 'created_at' => date('Y-m-d H:i:s'), // إضافة طابع زمني يدوي إذا لم يتم تلقائيًا 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17افتح
https://thinkphp.servbay.demo/mysql-add-user
لاختبار الإضافة.قراءة بيانات المستخدمين عبر الكود
استخدم ذات الواجهة لجلب البيانات:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // جلب جميع المستخدمين return json($users); // عرضها بتنسيق JSON });
1
2
3
4
5
6
7
8افتح
https://thinkphp.servbay.demo/mysql-users
لعرض بيانات جدول المستخدمين.
مثال PostgreSQL
إذا فعلت خدمة PostgreSQL وأعددت الاتصال في config/database.php
.
ضبط الاتصال
تأكد من إعداد الاتصال كما يلي (يمكنك ضبطه حسب قاعدة بياناتك):
php<?php // config/database.php (جزء) return [ // ... إعدادات أخرى ... 'connections' => [ // ... إعدادات MySQL ... 'pgsql' => [ // نوع القاعدة 'type' => 'pgsql', // عنوان الخادم 'hostname' => env('database.hostname', '127.0.0.1'), // اسم القاعدة 'database' => env('database.database', 'servbay_thinkphp_app'), // ينصح بإنشاء قاعدة منفصلة للمشروع // اسم المستخدم 'username' => env('database.username', 'root'), // كلمة مرور 'password' => env('database.password', 'password'), // كلمة مرور ServBay الافتراضية — للتطوير فقط! // المنفذ 'hostport' => env('database.hostport', '5432'), // المنفذ الافتراضي لـ PostgreSQL // ... إعدادات أخرى ... ], // ... إعدادات قواعد أخرى ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27تنبيه هام:
- مثل MySQL، أنشئ قاعدة بيانات منفصلة لـ PostgreSQL وحدد اسمها في الإعداد.
- كلمة مرور المستخدم الافتراضية
password
للمطور المحلي فقط.
إدخال بيانات مستخدم جديد عبر الكود باستخدام PostgreSQL
استخدم واجهة
Db
وحدد الاتصال بـpgsql
كما يلي:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // استخدام اتصال pgsql 'name' => 'ServBay PgSQL User', 'email' => 'pgsql-demo@servbay.demo', // عنوان بريد تجريبي باسم الخدمة 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17افتح
https://thinkphp.servbay.demo/pgsql-add-user
لاختبار الإضافة.قراءة بيانات المستخدمين عبر PostgreSQL
نفس الواجهة مع تحديد الاتصال:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // جلب بيانات المستخدمين من pgsql return json($users); // عرضها بتنسيق JSON });
1
2
3
4
5
6
7
8افتح
https://thinkphp.servbay.demo/pgsql-users
لاستعراض بيانات جدول المستخدمين على PostgreSQL.
خلاصة
من خلال الخطوات السابقة، يكون لديك مشروع ThinkPHP 8 يعمل بكفاءة في بيئة ServBay المحلية. تعلمت كيف تنشئ المشروع من خلال Composer، تضبط خادم الويب باستخدام Caddy، وتشتبك مع قواعد البيانات MySQL، PostgreSQL، Memcached وRedis باستخدام الإمكانيات المدمجة في ServBay.
يُبسّط ServBay بشكل كبير إعداد بيئة تطوير PHP وأطر العمل مثل ThinkPHP لتستطيع التركيز على تنفيذ منطق الأعمال. يمكنك الآن مواصلة تطوير تطبيقك والاستفادة الكاملة من حزم ServBay ووظائفه المتنوعة.