در PHP خیلی زود به کد دیگران نیاز پیدا میکنید؛ مثلاً برای ایمیل، اعتبارسنجی یا درگاه پرداخت. قدیم zip دانلود میکردید و با require پیاپی لود میکردید؛ با رشد پروژه و وابستگیهای تو در تو این کار شکننده میشود. Composer همین اصطکاک را حل میکند.
مدیریت وابستگی به سبک Composer
Composer مثل Apt سراسری نصب نمیکند؛ برای هر پروژه جداست. کتابخانهها داخل پوشهٔ vendor همان پروژه میمانند. ایده از npm و Bundler آمده است:
- در
composer.jsonمیگویید به چه بستههایی نیاز دارید. - Composer نسخههای سازگار با PHP و بقیهٔ بستهها را پیدا میکند.
- فایلها داخل
vendorمیآیند. - یک autoload میسازد تا کلاسها را دستی include نکنید.
نسخههای جدید معمولاً حداقل PHP 7.2.5 میخواهند (شاخهٔ LTS قدیمیتر روی PHPهای پایینتر هم هست). unzip و Git به دانلود و همگامسازی کمک میکنند.
نصب یک بستهٔ نمونه
برای لاگ، monolog/monolog:
bashcomposer require monolog/monolog
composer.json، پوشهٔ vendor و composer.lock ساخته یا بهروز میشوند:
json{
"require": {
"monolog/monolog": "^3.0"
}
}
نمونه در index.php:
php<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('main_channel');
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));
$log->warning('کاربر بدون رمز عبور معتبر وارد شد');
echo "عملیات لاگ با موفقیت انجام شد.";
با php index.php همان پیام چاپ میشود و app.log کنار پروژه ساخته میشود؛ پس مسیر کلاسهای کتابخانه را دستی نمینویسید.
دو اشتباه رایج
- کامیت کردن
vendorدر گیت حجم مخزن را بیخود بالا میبرد.vendor/را در.gitignoreبگذارید؛ فقطcomposer.jsonوcomposer.lockرا نگه دارید. بقیه باcomposer installهمان نسخهها را میگیرند. - نادیده گرفتن
composer.lockیعنی هر محیط نسخهی خودش را میگیرد؛ قفل تضمین میکند همهٔ محیطها همان ویرایشها را بگیرند و تفاوت نسخه باعث کرش نشود.
قدم بعدی
اگر میخواهید PHP ماژولار، namespace و اکوسیستم را از پایه با تمرین زنده یاد بگیرید: پیاچپی از صفر تا برنامهنویس.




نظرها
اولین نفری باشید که نظر میدهدسؤالتان را بپرسید یا تجربهتان را بنویسید تا نویسندهی مطلب پاسخ بدهد.