إنشاء وتشغيل مشروع ThinkPHP 8 داخل ServBay
سيرشدك هذا الدليل حول كيفية استخدام بيئة التطوير المحلية القوية ServBay لإنشاء، تهيئة وتشغيل مشروع PHP مبني على إطار العمل ThinkPHP 8 بسرعة وسهولة. يوفر ServBay بيئة PHP مُجهزة مسبقًا، وخوادم ويب (Caddy أو Nginx)، وعدة قواعد بيانات، مما يجعل بناء مشروع ThinkPHP محليًا أكثر بساطة ووضوحًا.
ما هو ThinkPHP؟
ThinkPHP هو إطار عمل PHP مفتوح المصدر نشأ في الصين، يتميز بالسرعة والبساطة والتصميم البرمجي كائني التوجه (OOP). يستهدف الإطار توفير أدوات مريحة للمطورين لبناء تطبيقات ويب عصرية من خلال مبادئ التطوير الفعالة والبسيطة. اشتهر ThinkPHP في أوساط تطوير PHP الصينية بفضل سهولة استخدامه، وميزاته المتنوعة (مثل ORM المتقدم، التوجيه المرن، محرك القوالب المدمج، ودعم التخزين المؤقت)، إلى جانب دعمه المجتمعي الواسع.
أهم ميزات وفوائد ThinkPHP
- تصميم بسيط وفعال: هيكلية واضحة وسهلة القراءة والصيانة، مع إنتاجية عالية للمطور.
- مميزات متكاملة: يشمل المكونات الشائعة لتطوير الويب مثل بنية MVC، نظام ORM، محرك قوالب، التخزين المؤقت، إدارة الجلسات، التحقق من الصلاحيات، وحماية النماذج.
- ORM قوي: يوفر تعاملًا قويًا وسهلًا مع قواعد البيانات للتسهيل على المطور.
- توجيه مرن: يدعم أنماط توجيه متعددة لتلبية متطلبات روابط URL المعقدة.
- نظام بيئي مزدهر: العديد من المكتبات والإضافات، مع مجتمع كبير ونشط.
- تحديث مستمر: دعم مستمر لمستجدات لغة PHP واتجاهات تطوير الويب.
ThinkPHP مناسب لكافة الأحجام، من المشاريع الصغيرة إلى تطبيقات المؤسسات الضخمة.
إنشاء مشروع ThinkPHP 8 باستخدام ServBay
يمنح ServBay بيئة مثالية لتطوير مشاريع ThinkPHP 8 محليًا، حيث يوفر:
- نسخ PHP متعددة مع جميع التوسعات الشهيرة مُثبتة مُسبقًا.
- خوادم ويب مدمجة (Caddy أو Nginx) لإعداد المواقع بسهولة.
- تكامل مع قواعد بيانات MySQL, PostgreSQL, MongoDB, Redis, Memcached وغيرها.
- مدير اعتمادية Composer مُدمج.
من خلال هذا الدليل ستتمكن من الاستفادة من جميع هذه الميزات لتجهيز مشروعك بسرعة.
المتطلبات الأساسية
قبل البدء، تأكد من القيام بما يلي:
- تحميل وتثبيت ServBay على نظام macOS الخاص بك.
- تشغيل ServBay، والتأكد من تشغيل إصدار PHP المناسب (ThinkPHP 8 يتطلب PHP 8.0 أو أحدث) وقواعد البيانات اللازمة (مثل MySQL, PostgreSQL, Redis, Memcached). يمكنك التحقق وتشغيل هذه الخدمات من تبويب “الحزم البرمجية” في لوحة تحكم ServBay.
إنشاء مشروع ThinkPHP
يُنصح بتخزين ملفات مواقعك المحلية تحت الدليل /Applications/ServBay/www
ليسهل على ServBay إدارة جميع مواقعك.
تأكد من توفر Composer
Composer مثبت مُسبقًا مع ServBay، ولا حاجة لإعادة تثبيته غالبًا. تحقق منه عبر الأمر
composer --version
في الطرفية ضمن ServBay.إنشاء مشروع ThinkPHP باستخدام Composer
افتح الطرفية واكتب الأوامر التالية في مجلد المواقع الجذر لتنشئ مشروع ThinkPHP 8 جديدًا:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2سيتم إنشاء مجلد جديد باسم
servbay-thinkphp-app
وتحميل ملفات ThinkPHP 8 الأساسية وجميع الاعتمادات المطلوبة.الدخول إلى مجلد المشروع
بعد انتهاء الإنشاء، انتقل إلى مجلد المشروع:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
تهيئة إعدادات المشروع
بعد إنشاء المشروع، ستحتاج إلى بعض الإعدادات الأساسية.
إعداد بيانات الاتصال بقاعدة البيانات
يتم إدارة إعدادات قاعدة بيانات ThinkPHP عادة في ملف
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). - كلمة المرور الافتراضية للمستخدم
root
في ServBay هيpassword
. يرجى عدم استخدامها إلا في بيئة التطوير المحلية! يجب في الإنتاج استخدام كلمة مرور قوية ومستخدم بصلاحيات محدودة. - إذا كنت تستخدم ملف
.env
لإدارة المتغيرات البيئية، تأكد من أن الإعدادات فيه تطغى على القيم الافتراضية فيconfig/database.php
.
- قم بتعديل قيمة
إعداد خادم الويب
ملف الدخول الرئيسي في ThinkPHP هو public/index.php
، ويعتمد التطبيق على قواعد إعادة كتابة URL لإدارة التوجيهات. بما أن نظام التوجيه في ThinkPHP يختلف عن توجيه الملفات الثابتة الاعتيادي، عليك تفعيل قاعدة إعادة الكتابة الجاهزة عبر ServBay.
من إعدادات الموقع، اختر “ThinkPHP” من قائمة قواعد إعادة الكتابة ثم احفظ الإعدادات.
للمزيد من التفاصيل عن إعداد المواقع، راجع إضافة أول موقع.
إضافة كود تجريبي
لاختبار نجاح الإعداد وتحقق التوجيهات، أضف مسار وتجربة بسيطة باستعمال الكود التالي داخل /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
:
php
<?php
// route/app.php
use think\facade\Route;
// تعريف مسار 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!
فهذا يعني أن ThinkPHP 8 يعمل بنجاح على بيئة ServBay وأن إعدادات PHP-FPM وخادم الويب صحيحة.
أمثلة على قواعد بيانات NoSQL
يوفر ServBay بشكل افتراضي قواعد بيانات NoSQL مثل Memcached وRedis. يوفر ThinkPHP طبقة تجريدية للتخزين المؤقت تتيح دمج هذه الخدمات بسهولة.
مثال على Memcached
تفعيل امتداد Memcached
امتداد Memcached مثبت مسبقًا مع PHP في ServBay. فقط تأكد من تشغيل خدمة Memcached من لوحة تحكم ServBay.
إعداد التخزين المؤقت لـ Memcached
عدل ملف
config/cache.php
ليستخدم 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استخدام التخزين المؤقت داخل الكود
يمكنك استخدام واجهة ThinkPHP عبر الـ Facade
Cache
داخل المعالجات والمسارات: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 مثبت مسبقًا مع PHP في ServBay. فقط تأكد من تشغيل خدمة Redis من لوحة تحكم ServBay.
إعداد التخزين المؤقت لـ Redis
عدل ملف
config/cache.php
ليستخدم 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), // المنفذ الافتراضي // كلمة المرور (لا يوجد كلمة مرور افتراضية في 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 لا يُضبط له كلمة مرور افتراضيًا. إذا قمت بإعداد كلمة مرور يدويًا، حدث هذا المتغير.
استخدام التخزين المؤقت مع Redis في الكود
يمكنك استخدام الواجهة كالتالي:
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إنشاء ملف ترحيل جديد
أنشئ ملف ترحيل جديد (مثلاً لإنشاء جدول users):
bashphp think migrate:create CreateUserTable
1سينشئ البرنامج ملفًا جديدًا في
database/migrations
، باسم يحوي الطابع الزمني.تحرير ملف الترحيل
افتح ملف الترحيل وأضف في دالة
change()
تعريف الجدول:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // إنشاء الجدول بواسطة createTable $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'اسم المستخدم']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'عنوان البريد الإلكتروني']) ->addIndex(['email'], ['unique' => true]) // إضافة فهرس فريد ->addTimestamps() // إضافة created_at و updated_at ->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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62تشغيل الترحيلات
من مجلد المشروع، نفذ أمر الترحيل لإنشاء الجدول:
bashphp think migrate:run
1عند النجاح ستجد الجدول متوفرًا في قاعدة البيانات.
مثال MySQL
افترض أنك شغّلت خدمة MySQL وحدثت بيانات الاتصال في config/database.php
.
ضبط بيانات الاتصال بـ MySQL
تأكد من صحة الإعدادات كما في قسم "تهيئة إعدادات المشروع" أعلاه.
إدخال بيانات مستخدم جديد بالكود
يمكنك الاستعانة بـ Db Facade أو الـ ORM. المثال التالي بـ Facade:
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' => '[email protected]', // بريد تجريبي '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
.
ضبط اتصال PostgreSQL
تأكد من وجود الإعداد التالي أو ما يقابله:
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'), // كلمة المرور الافتراضية // المنفذ 'hostport' => env('database.hostport', '5432'), // المنفذ الافتراضي // ... إعدادات أخرى ... ], // ... إعدادات أخرى ... ], ];
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ملاحظة:
- أنشئ قاعدة بيانات فارغة للتطبيق، وحددها في الإعداد.
- كلمة المرور الافتراضية للمستخدم
root
هيpassword
فقط للتطوير المحلي.
إدخال مستخدم جديد بالكود
استخدم الـ ORM أو Db Facade مع تحديد الاتصال على النحو التالي:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ 'name' => 'ServBay PgSQL User', 'email' => '[email protected]', // بريد تجريبي '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(); return json($users); });
1
2
3
4
5
6
7
8زر
https://thinkphp.servbay.demo/pgsql-users
لعرض بيانات PostgreSQL.
الخلاصة
باتباع هذه الخطوات تكون قد أعددت بنجاح بيئة تطوير محلية لـ ThinkPHP 8 باستخدام ServBay، وتعلمت كيفية الاستفادة من Composer في إنشاء المشروع، وضبط خادم Caddy لدعم توجيهات ThinkPHP، وربط المشروع بقواعد بيانات MySQL، PostgreSQL بالإضافة لتفعيل Memcached وRedis.
يسهل ServBay بشكل كبير إعداد بيئات تطوير أطر PHP مثل ThinkPHP، ليتيح لك التركيز على تنفيذ منطق العمل والتطوير دون تشتيت بالبيئة، ويمكنك الآن مواصلة تطوير تطبيقك باستغلال كافة الحزم والميزات المتاحة عبر ServBay.