طريقة استخدام Composer

Ali Majrashiمنذ 8 سنوات

قبل البدء

سوف نستخدم Composer لتثبيت monolog/monolog وهي مكتبة لعمل السجلات
وامكانية حفظها بملفات او تخزينها بقاعدة بيانات او إرسالها الى بريد إلكتروني 
إذا لم يسبق لك ان قمت بتثبيت Composer راجع هذا المقال لمعرفة طريقة التثبيت

https://3alam.pro/articles/php/composer-introduction/

ملاحظة مهمة: إذا قمت بتثبيت 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

سيظهر لك التالي إذا تم التثبيت بنجاح

Composer-install.jpg

ستلاحظ أيضا أن الأمر 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

سيظهر لك التالي

carbon-require.jpgوسيتم تحديث ملف 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
إعجاب
3384
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !