طريقة استخدام Composer
قبل البدء
سوف نستخدم Composer لتثبيت monolog/monolog وهي مكتبة لعمل السجلات
وامكانية حفظها بملفات او تخزينها بقاعدة بيانات او إرسالها الى بريد إلكتروني
إذا لم يسبق لك ان قمت بتثبيت Composer راجع هذا المقال لمعرفة طريقة التثبيت
ملاحظة مهمة: إذا قمت بتثبيت Composer داخل مجلد المشروع فيجب ان تستخدم
php composer.phar
لتنفيذ الأوامر ولكن اذا قمت بتثبيت Composer بشكل عام بجهازك يجب ان تستخدم
composer
لتنفيذ الأوامر بدون php و .phar التي بنهاية Composer
إعداد المشروع
انا استخدم MAMP PRO كسيرفر محلي تستطيع استخدام اي سيرفر محلي حسب رغبتك
سنقوم بعمل مجلد بإسم composer داخل مجلد htdocs
(بعض السيرفرات المحليه تسمي هذا المجلد www)
بعدها داخل هذا المجلد سنقوم بعمل ملف جديد من نوع json بإسم composer.json
وظيفة هذا الملف هو تعريف المكتبات التي يحتاجها مشروعك بداخله
مفتاح "require"
عن طريق هذا المفتاح سنحدد المكتبات التي نرغب بتثبيتها داخل مجلد المشروع
ببساطة انت تخبر Composer بما تحتاج من مكتبات وهو يقوم بعملية التثبيت
الآن داخل الملف composer.json قم بكتابة هذا الكود
{
"require": {
"monolog/monolog": "1.14.*"
}
}
كما تلاحظ ان المفتاح require يقبل object عن طريقه نحدد المكتبات التي نرغب بتثبيتها داخل
مجلد المشروع وبداخله نعرف اسم المكتبة "monolog/monolog" ورقم النسخة "*.1.14"
تسمية المكتبات
اسم أي مكتبة يتكون من جزئين الأول vendor name وهو اسم المطور
والثاني project name اسم المشروع
بالغالب ستلاحظ انها متشابهة مثل "monolog/monolog" تم وضع اسم المطور
لمنع تعارض اسماء المكتبات بحيث انها تسمح لأكثر من مطور إنشاء مكتبة تحمل نفس الإسم
مثلا json فيختلف المسمى حسب اسم المطور مثلا "ali/json" او"moath/json"
او "mohammed/json"
إصدارات المكتبات
في الكود السابق حددنا رقم الإصدار الذي نرغب بتثبيته وهو "*.1.14" من مكتبة Monolog
وهذا يخبر Composer بان يثبت احدث نسخة تندرج ضمن اصدارات 1.14 فمثلا لو اخر اصدار
هو "1.14.4" فسيقوم Composer بتثبيته لك ولكن لن يقوم بتثبيت اي نسخ اقل من هذا الإصدار
مثل "1.3" او أعلى منه مثل "1.15" الا إذا قمت انت بتغيير الإصدار الذي ترغب بتثبيته
الإستقرار
إفتراضيا سيقوم Composer بتثبيت أحدث نسخة مستقرة ولن يقوم بتثبيت اي نسخة مازالت تحت
التطوير او في مرحلة الإختبار إلا إذا قمت أنت بتحديد ذلك وأخبرت Composer ان يقوم بتثبيت
نسخة تطويرية من المكتبة ونستخدم هنا Stability flag
تثبيت المكتبات
لتثبيت المكتبات التي قمنا بتحديدها داخل الملف composer.json نستخدم الأمر install
عن طريق Terminal توجه لمجلد المشروع عن طريق الأمر cd ثم بعدها نفذ هذا الأمر
إذا قمت بتثبيت Composer محليا داخل مجلد المشروع
php composer.phar install
او هذا الأمر اذا قمت بتثبيته بشكل عام بجهازك
composer install
سيقوم هذا الأمر بالبحث عن المكتبة ورقم النسخة الذي قمنا بتحديدة ثم تثبيت المكتبة داخل مجلد
vendor ستلاحظ انه تم تثبيت المكتبة Monolog داخل vendor/monolog/monolog
سيظهر لك التالي إذا تم التثبيت بنجاح
ستلاحظ أيضا أن الأمر install قام أيضا بإنشاء ملف جديد بإسم composer.lock
ملف القفل composer.lock
وظيفة هذا الملف إقفال المشروع بالنسخة والإصدار الذي قمنا بإختياره عند التثبيت فداخل هذا الملف
أسماء المكتبات وإصداراتها التي تم تثبيتها لهذا المشروع
وهذا مهم جدا فعند تنفيذ الأمر install على هذا المشروع فإن Composer يبحث عن composer.lock
إذا كان موجود سيقوم بتثبيت الإصدارات والمكتبات المحددة داخل هذا الملف فقط
وسيتم تجاهل composer.json كليا
الفائدة: إذا كنت تعمل ضمن فريق وقمت انت بإعداد بيئة العمل للمشروع وقمت بتحديد المكتبات
المطلوبة للمشروع وعملت على المشروع لمدة ثم شاركت العمل مع قريقك فإن Composer
يضمن لك تثبيت نفس المكتبات بنفس الإصدارات المثبتة بجهازك حتى لو توفرت نسخ أحدث
مما يحد من وجود أخطاء محتملة بسبب النسخ الجديدة ويضمن بيئة عمل موحدة
إذا لم يتم العثور على composer.lock فإن Composer سيقوم بقراءة ملف composer.json
ثم تثبيت المكتبات والإصدارات المحددة بداخله ومن ثم عمل ملف composer.lock جديد
تنبيه: عند إستخدام الأمر install وكان الملف composer.lock والملف composer.json
غير متزامنين فانه سيتم عرض تنبيه لك بذلك
طبعا الملف composer.lock لايمنعك من تحديث المكتبات في حالة توفر إصدارت جديدة
تحديث المكتبات
لتحديث المكتبات في حالة توفر إصدار جديد قم باستخدام الأمر update فهو سيقوم بتحديث
المكتبات لآخر إصدار ثم تحديث الملف composer.lock
استخدم هذا الأمر للتحديث اذا قمت بتركيب Composer محليا داخل مجلد المشروع
php composer.phar update
أو هذا الأمر إذا قمت بتركيب Composer بشكل عام بجهازك
composer update
إذا كنت ترغب بتثبيت او تحديث مكتبة واحدة من عدة مكتبات معرفة داخل الملف
composer.json تستطيع تحديد اسم المكتبة ضمن الأمر install أو update
استخدم هذا الأمر للتحديث اذا قمت بتركيب Composer محليا داخل مجلد المشروع
php composer.phar update monolog/monolog
أو هذا الأمر إذا قمت بتركيب Composer بشكل عام بجهازك
composer update monolog/monolog
مصدر المكتبات Packagist
Packagist هو المصدر الرئيسي لمكتبات Composer وعن طريقه تستطيع البحث وتثبيت
اي مكتبة برمجية يقوم مطورها بنشرها بهذا الموقع تم عمل الموقع ليكون مصدر لكل المطورين
بحيث يتستطيع المطور نشر اي مكتبة قام بتطويرها ويرغب ان تستخدم من بقية المطورين وانت
ايضا تستطيع بكل سهولة تثبيت واستخدام اي مكتبة بهذا الموقع عن طريق الأمر require
مثلا بعد ان قمنا بتركيب Monolog ثم اردت تركيب مكتبة أخرى مثلا nestbot/carbon
(مكتبة مميزة للتعامل مع التاريخ و الوقت) بكل سهولة عن طريق Terminal داخل مجلد المشروع
استخدم هذا الأمر لتثبيت المكتبة اذا قمت بتركيب Composer محليا داخل مجلد المشروع
php composer.phar require nesbot/carbon
أو هذا الأمر إذا قمت بتركيب Composer بشكل عام بجهازك
composer require nesbot/carbon
سيظهر لك التالي
وسيتم تحديث ملف composer.json و composer.lock
ويصبح محتوى ملف composer.json كالتالي
{
"require": {
"monolog/monolog": "1.14.*",
"nesbot/carbon": "^1.20"
}
}
الإستدعاء التلقائي Autoloading
بعد عملية التثبيت بنجاح نأتي لأهم مميزات Composer وهي Autoloader
إذا كانت المكتبة تدعم هذي الخاصية فإن إستخدامها يصبح سهل جدا بواسطة إدراج
سطر واحد باي ملف php يمكنك ذلك من استخدام اي مكتبة وجميع وظائفها بكل سهولة
فبعد عملية التثبيت سيقوم Composer بإنشاء ملف جديد بإسم autoload.php
داخل المجلد vender وعند تضمين هذا الملف داخل احد ملفات مشروعك فانك
تستطيع استخدام المكتبات المثبته بكل سهولة
الآن قم بإنشاء ملف index.php داخل مجلد المشروع وداخل هذا الملف اكتب التالي
<?php
require 'vendor/autoload.php';
إذهب للمتصفح على العنوان http://localhost/composer
للتأكد من عدم وجود أي أخطاء
بعدها قم بتحرير ملف index.php وقم بإضافة هذا الكود
للبدء باستخدام Monolog مباشرة اسفل الكود السابق
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('your.log', Logger::WARNING));
// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');
وبعدها توجه للمتصفح للعنوان المشروع http://localhost/composer
لن يظهر لك شيئ لأن وظيفة المكتبة كتابة ملف انت تحدد اسمه وموقعه ضمن
مجلدات مشروعك فلو ذهبت لمجلد composer ستلاحظ وجود ملف جديد
باسم your.log
لكل مكتبة ملفات مساعدة لشرح مفصل لعملية الإستخدام مثلا Monolog يمكنك
زيارة هذه الصفحة Usage Instructions لعرض ملف المساعدة وشرح طريقة
استخدام المكتبة ضمن مشروعك
يمكنك Composer أيضا من تحديد ملفات الأكواد التي قمت بكتابتها وإستدعائها
عن طريق ملف autoload.php بشكل آلي لمشروعك
عن طريق الملف composer.json
مثال بسيط داخل مجلد المشروع قم بإنشاء مجلد جديد بإسم src وبعدها لإستدعاء هذا المجلد
وكل مايحتويه من كلاسات قم بإضافة هذا الكود إلى ملف composer.json
سيقوم هذا الأمر بعمل خريطة تربط Namespace بالمجلد الذي ترغب بإستدعاء محتواه
حيث ان namespace هنا هو Acme والمجلد الذي سوف نضع ملفات الاكواد فيه هو src
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
لاتنسى اننا نتعامل مع ملف من نوع json ولإضافة object جديد تحت السابق "require"
لاتنسى الفاصلة بعد { ليصبح شكل الكود النهائي لملف composer.json
{
"require": {
"monolog/monolog": "1.14.*",
"nesbot/carbon": "^1.20"
},
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
بعدها قم بتنفيذ الأمر dump-autoload ليقوم Composer بتسجيل PSR-4 Autoloader
للمساحة Acme ويتم تحديث محتوى autoload.php
استخدم هذا الأمر اذا قمت بتركيب Composer محليا داخل مجلد المشروع
php composer.phar dump-autoload
أو هذا الأمر إذا قمت بتركيب Composer بشكل عام بجهازك
composer dump-autoload
وبعدها قم بإنشاء ملف كلاس php بإسم Foo.php داخل المجلد src
وضع في محتواه الكود التالي
<?php
namespace Acme;
class Foo
{
function __construct()
{
echo "i'm printing 3alampro.com";
}
}
الآن لإستدعاء الكلاس داخل ملف index.php كل الي علينا استخدام namespace
ثم اسم الكلاس وسيتم طلب الكلاس بشكل آلي قم بإضافة هذا الكود إلى ملف index.php
$class = new Acme\Foo;
ليصبح الكود النهائي لملف index.php التالي
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('your.log', Logger::WARNING));
// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');
$class = new Acme\Foo;
ثم توجه لرابط المشروع من المتصفح سيتم طباعة الرساله
كما هو محدد في عمل الكلاس الذي قمنا بإنشائه
بجانب دعم Composer إلى PSR-4 autoloading
يدعم ايضا PSR-0 و استدعاء كلاسات او ملفات محددة
داخل مجلدات مشروعك
اتمني ان يحوز المقال على إعجابكم وأن يكون ذو فائدة لمشاريعكم المستقبلية
التعليقات (0)
عرض المزيد.. جديد مقالاتي
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !