عملية إنشاء ونشر المكونات الأساسية
المبدأ
- على سبيل المثال، فإن المكون يتكون من ثلاثة أجزاء، أحدها هو ملف برنامج وسيط قاعدي للعبور، والثاني هو ملف تكوين الوسيط middleware.php، والثالث هو ملف Install.php الذي يتم إنشاؤه تلقائيًا عبر الأمر.
- نستخدم الأمر لتعبئة الملفات الثلاثة ونشرها إلى composer.
- عند تثبيت المستخدم للمكون التبادلي عبر composer، سيتم نسخ ملف برنامج الوسيط وملف التكوين إلى
/{المشروع الرئيسي}/config/plugin
، ليتم تحميله بواسطة webman. وهذا يحقق إعداد تكوين الملف الواصل للعبور بشكل تلقائي. - عند حذف المستخدم لهذا المكون باستخدام composer، سيقوم Install.php بحذف ملف برنامج الوسيط وملف التكوين الخاص به، مما يحقق إلغاء التثبيت التلقائي للمكون.
المعايير
- يتكون اسم المكون من جزئين،
البائع
واسم المكون
، مثلwebman/push
، وهذا يتوافق مع اسم حزمة composer. - يتم وضع ملفات تكوين المكونات في
config/plugin/البائع/اسم المكون/
(سيقوم أمر console بإنشاء دليل التكوين تلقائيًا). إذا لم يكن المكون بحاجة إلى تكوين، يجب حذف دليل التكوين الذي تم إنشاؤه تلقائيًا. - يدعم دليل تكوين المكون فقط app.php كالتكوين الرئيسي للمكون، bootstrap.php كإعداد عملية بدء التشغيل، route.php كإعداد التوجيه، middleware.php كإعداد الوسيط، process.php كإعداد عملية مخصصة، database.php كإعداد قاعدة البيانات، redis.php كإعداد redis، thinkorm.php كإعداد thinkorm. ستتعرف webman على هذه التكوينات تلقائيًا.
- يمكن للمكون الحصول على التكوين باستخدام الطريقة التالية
config('plugin.البائع.اسم المكون.ملف التكوين.عنصر التكوين المحدد');
، مثلconfig('plugin.webman.push.app.app_key')
- إذا كان للمكون إعداد قاعدة بيانات خاص به، يمكن الوصول إليه بالطريقة التالية.
illuminate/database
يكونDb::connection('plugin.البائع.اسم المكون.الاتصال المحدد')
، وthinkrom
يكونDb::connct('plugin.البائع.اسم المكون.الاتصال المحدد')
- إذا كان المكون بحاجة لوضع ملفات العمل في دليل
app/
، يجب التأكد من عدم وجود تعارض مع مشروع المستخدم أو مكونات أخرى. - ينبغي على المكون تجنب نسخ الملفات أو الأدلة إلى المشروع الرئيسي، على سبيل المثال، باستثناء ملفات التكوين التي يحتاجها المكون التبادلي، يجب وضع ملفات الوسيط في
vendor/webman/cros/src
، وليست بحاجة للنسخ إلى المشروع الرئيسي. - من المستحب استخدام أحرف كبيرة لمساحة اسم المكون، مثل Webman/Console.
مثال
تثبيت webman/console
عبر سطر الأوامر
composer require webman/console
إنشاء مكون
لنفرض أن اسم المكون الذي سيتم إنشاؤه هو foo/admin
(الاسم هو أيضًا اسم المشروع الذي سيتم نشره عبر composer، ويجب أن يكون بالأحرف الصغيرة).
قم بتشغيل الأمر
php webman plugin:create --name=foo/admin
بعد إنشاء المكون، سيتم إنشاء الدليل vendor/foo/admin
لتخزين الملفات المتعلقة بالمكون و config/plugin/foo/admin
لتخزين التكوينات المتعلقة بالمكون.
ملاحظة
config/plugin/foo/admin
يدعم التكوينات التالية، app.php كالتكوين الرئيسي للمكون، bootstrap.php كإعداد عملية بدء التشغيل، route.php كإعداد التوجيه، middleware.php كإعداد الوسيط، process.php كإعداد عملية مخصصة، database.php كإعداد قاعدة البيانات، redis.php كإعداد redis، thinkorm.php كإعداد thinkorm. تنسيق التكوين يتطابق مع webman، وسيتعرف webman تلقائيًا على هذه التكوينات ويدمجها في التكوين.
يمكن الوصول إليها باستخدام بادئةplugin
، مثل config('plugin.foo.admin.app');
تصدير المكون
عند الانتهاء من تطوير المكون، قم بتنفيذ الأمر التالي لتصدير المكون
php webman plugin:export --name=foo/admin
التصدير
توضيح
بعد التصدير، سيتم نسخ دليل config/plugin/foo/admin إلى vendor/foo/admin/src، وسيتم إنشاء ملف Install.php تلقائيًا، حيث يستخدم Install.php لتثبيت المكون تلقائيًا وتنفيذ بعض العمليات عند إلغاء تثبيته.
الإجراء الافتراضي عند التثبيت هو نسخ التكوينات من vendor/foo/admin/src إلى التكوين الحالي للمشروع في config/plugin.
الإجراء الافتراضي عند الإزالة هو حذف ملفات التكوين من config/plugin في المشروع الحالي.
يمكنك تعديل Install.php لتنفيذ بعض العمليات المخصصة عند تثبيت أو إلغاء تثبيت المكون.
تقديم المكون
- لنفترض أن لديك حسابًا على github وpackagist.
- قم بإنشاء مشروع admin على github وقم بتحميل الكود، لنفترض أن عنوان المشروع هو
https://github.com/اسم المستخدم/admin
. - انتقل إلى العنوان
https://github.com/اسم المستخدم/admin/releases/new
لتقديم إصدار جديد مثلv1.0.0
. - انتقل إلى packagist وانقر على خيار
Submit
في الشريط العلوي، ثم قدم عنوان مشروع github الخاص بكhttps://github.com/اسم المستخدم/admin
وبهذا تكون قد أكملت نشر المكون.
تلميح
إذا ظهرت رسالة بحالة تعارض بحروف عند تقديم المكون فيpackagist
، يمكنك اختيار اسم بائع مختلف، على سبيل المثال، تغييرfoo/admin
إلىmyfoo/admin
.
عندما يتم تحديث الكود الخاص بمشروع المكون، يلزمك مزامنة الكود مع github، ثم العودة إلى العنوان https://github.com/اسم المستخدم/admin/releases/new
لنشر إصدار جديد، ثم انتقل إلى صفحة https://packagist.org/packages/foo/admin
واضغط على زر Update
لتحديث الإصدار.
إضافة أوامر للمكون
في بعض الأحيان، يحتاج المكون الخاص بنا إلى بعض الأوامر المخصصة لتقديم بعض الوظائف المساعدة، على سبيل المثال، بعد تثبيت مكون webman/redis-queue
، سيتم إضافة أمر redis-queue:consumer
تلقائيًا إلى المشروع، حيث يمكن للمستخدم تشغيل php webman redis-queue:consumer send-mail
وسيتم إنشاء فئة المستهلك SendMail.php في المشروع، وهذا يساعد في التسريع من عملية التطوير.
لنفرض أن مكون foo/admin
يحتاج إلى إضافة الأمر foo-admin:add
، يمكنك اتباع الخطوات التالية.
إنشاء أمر جديد
إنشاء ملف الأمر vendor/foo/admin/src/FooAdminAddCommand.php
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command
{
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = 'هذا هو وصف سطر الأوامر';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'إضافة اسم');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
ملاحظة
لتجنب تعارض الأوامر بين المكونات، من المستحسن أن تكون تنسيقات الأوامر على الشكلالبائع-اسم المكون:الأمر المحدد
، على سبيل المثال، يجب أن تكون جميع الأوامر لمكونfoo/admin
مسبوقة بـfoo-admin:
، مثلfoo-admin:add
.
إضافة تكوين
إنشاء تكوين جديد config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....يمكنك إضافة تكوينات متعددة...
];
تلميح
يستخدمcommand.php
لتكوين الأوامر المخصصة للمكون، حيث يمثل كل عنصر في المصفوفة فئة ملف أمر سطر الأوامر، وتتناسب مع أمر واحد. عند قيام المستخدم بتشغيل الأمر، ستقومwebman/console
بتحميل الأوامر المخصصة المعينة في ملفcommand.php
لكل مكون تلقائيًا. لمزيد من المعلومات حول الأوامر، يرجى الرجوع إلى سطر الأوامر.
تنفيذ التصدير
قم بتشغيل الأمر php webman plugin:export --name=foo/admin
لتصدير المكون ورفعه إلى packagist
. بعد ذلك، عند تثبيت مكون foo/admin
، سيتم إضافة أمر foo-admin:add
. عند تنفيذ php webman foo-admin:add jerry
سيتم طباعة Admin add jerry
.