تطبيق الإضافات
كل إضافة تطبيق هي تطبيق كامل، يتم وضع كود المصدر في دليل {المشروع الرئيسي}/plugin
تنبيه
باستخدام الأمرphp webman app-plugin:create {اسم الإضافة}
يمكنك إنشاء إضافة تطبيق محليًا،
على سبيل المثالphp webman app-plugin:create cms
سيقوم بإنشاء هيكل الدليل التالي
plugin/
└── cms
├── app
│ ├── controller
│ │ └── IndexController.php
│ ├── exception
│ │ └── Handler.php
│ ├── functions.php
│ ├── middleware
│ ├── model
│ └── view
│ └── index
│ └── index.html
├── config
│ ├── app.php
│ ├── autoload.php
│ ├── container.php
│ ├── database.php
│ ├── exception.php
│ ├── log.php
│ ├── middleware.php
│ ├── process.php
│ ├── redis.php
│ ├── route.php
│ ├── static.php
│ ├── thinkorm.php
│ ├── translation.php
│ └── view.php
└── public
نرى أن لإضافة تطبيق نفس هيكل الدليل وملفات التكوين الخاصة بـ webman. في الواقع، تجربة تطوير إضافة تطبيق تشبه بشكل أساسي تلك الخاصة بمشروع webman، ما عليك سوى مراعاة النقاط التالية.
مساحة الأسماء
يجب أن تتبع أسماء الدلائل والإضافات معيار PSR4، نظرًا لأن الإضافات توضع في دليل plugin، فإن مساحات الأسماء تبدأ جميعها بـ plugin، على سبيل المثال plugin\cms\app\controller\UserController
، حيث أن cms هو الدليل الرئيسي لكود المصدر للإضافة.
الوصول عبر URL
تبدأ مسارات عنوان URL لإضافة التطبيق بـ /app
، على سبيل المثال، عنوان URL لـ plugin\cms\app\controller\UserController
هو http://127.0.0.1:8787/app/cms/user
.
الملفات الثابتة
تُخزن الملفات الثابتة في plugin/{الإضافة}/public
، على سبيل المثال، الوصول إلى http://127.0.0.1:8787/app/cms/avatar.png
في الواقع يسترجع الملف plugin/cms/public/avatar.png
.
ملفات التكوين
تكوين الإضافات مشابه لتكوين مشروع webman العادي، لكن تكوين الإضافات عمومًا يؤثر فقط على الإضافة الحالية ولا يؤثر عادةً على المشروع الرئيسي.
على سبيل المثال، فإن قيمة plugin.cms.app.controller_suffix
تؤثر فقط على لاحقة وحدة التحكم في الإضافة، وليس على المشروع الرئيسي.
مثال آخر هو أن قيمة plugin.cms.app.controller_reuse
تؤثر فقط على ما إذا كانت الإضافة تعيد استخدام وحدة التحكم، ولا تؤثر على المشروع الرئيسي.
وهاكذا بالنسبة لبقية إعدادات الإضافة مثل plugin.cms.middleware
، و plugin.cms.view
، و plugin.cms.container
، و plugin.cms.exception
، إذ تؤثر جميعها فقط على الإضافة ولا تؤثر على المشروع الرئيسي.
ومع ذلك، نظرًا لأن التوجيه هو عالمي، فإن التوجيهات المكونة للإضافات تؤثر أيضًا على النظام العالمي.
الحصول على التكوين
للحصول على تكوين إحدى الإضافات، استخدم الطريقة config('plugin.{الإضافة}.{التكوين المحدد}');
، على سبيل المثال للحصول على جميع إعدادات plugin/cms/config/app.php
، استخدم config('plugin.cms.app')
.
وبالمثل، يمكن أن يستخدم المشروع الرئيسي أو إضافات أخرى config('plugin.cms.xxx')
للحصول على تكوين إضافة cms.
إعدادات غير مدعومة
لا تدعم الإضافات إعدادات server.php و session.php، ولا تدعم إعدادات app.request_class
و app.public_path
و app.runtime_path
.
قاعدة البيانات
يمكن للإضافات تكوين قاعدة بيانات خاصة بها، على سبيل المثال، محتوى plugin/cms/config/database.php
هو كما يلي
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql هو اسم الاتصال
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'قاعدة البيانات',
'username' => 'اسم المستخدم',
'password' => 'كلمة المرور',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin هو اسم الاتصال
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'قاعدة البيانات',
'username' => 'اسم المستخدم',
'password' => 'كلمة المرور',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
طريقة الاقتباس هي Db::connection('plugin.{الإضافة}.{اسم الاتصال}');
، على سبيل المثال
use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();
إذا كنت ترغب في استخدام قاعدة بيانات المشروع الرئيسي، فما عليك سوى استخدامها مباشرةً، على سبيل المثال
use support\Db;
Db::table('user')->first();
// افترض أن المشروع الرئيسي قد قام أيضًا بتكوين اتصال admin
Db::connection('admin')->table('admin')->first();
تنبيه
كذلك يمكن استخدام thinkorm بطريقة مشابهة
Redis
تشبه طريقة استخدام Redis طريقة استخدام قاعدة البيانات، على سبيل المثال plugin/cms/config/redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
];
عند الاستخدام
use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');
وبالمثل، إذا كنت ترغب في إعادة استخدام إعدادات Redis الخاصة بالمشروع الرئيسي
use support\Redis;
Redis::get('key');
// افترض أن المشروع الرئيسي قد قام أيضًا بتكوين اتصال cache
Redis::connection('cache')->get('key');
السجلات
طريقة استخدام فئة السجلات مشابهة لطريقة استخدام قاعدة البيانات
use support\Log;
Log::channel('plugin.admin.default')->info('test');
إذا كنت ترغب في إعادة استخدام إعدادات السجل الخاصة بالمشروع الرئيسي، فما عليك سوى استخدامها مباشرة
use support\Log;
Log::info('محتوى السجل');
// افترض أن المشروع الرئيسي لديه إعداد سجل يسمى test
Log::channel('test')->info('محتوى السجل');
تثبيت وإلغاء تثبيت الإضافات
كل ما عليك فعله لتثبيت إضافة هو نسخ دليل الإضافة إلى دليل {المشروع الرئيسي}/plugin
، وستحتاج إلى reload أو restart لتفعيلها.
لإلغاء التثبيت، ما عليك سوى حذف دليل الإضافة المقابل من {المشروع الرئيسي}/plugin
.