ایجاد Repository یا مخزن در Composer

فروردین ۲۳, ۱۳۹۵ توسط : سعید

سلام

در این آموزش قصد داریم باهم نحوه ایجاد یک مخزن جدید در Composer رو یاد بگیریم. همینطور که میدونید (یا شایدم نمیدونید) کامپوزر زمانی به کار ما میاد که بخوایم در یک پروژه از کتابخانه های مختلف استفاده کنیم. استاندارهای کدنویسی در کتابخانه های مختلف باهم تفاوت دارند. این تفاوت باعث میشه که جمع آوری کتابخانه ها در یک پروژه کار سخت و طاقت فرسایی باشه. مثلا ممکنه یک کتابخانه از namespace ها استفاده کرده باشه ویکی دیگه به صورت قدیمی کدنویسی شده باشه. یا ممکنه یک کتابخانه با استاندارد psr-0 و یکی دیگه با psr-1 نوشته شده باشه.

با استفاده از کامپوزر میتونیم بدون اینکه نگران استاندارهای استفاده شده در کتابخانه ها باشیم، ازشون به راحتی استفاده کنیم. حتی میتونیم کلاسها و کتابخانه هایی که خودمون هم نوشتیم رو توی composer به صورت خصوصی یا عمومی قرار بدیم تا در آینده به راحتی بهش دسترسی داشته باشیم.

 

ایجاد پروژه جدید در کامپوزر

یک پوشه با نام src ایجاد کنید. در این پوشه یک پوشه دیگه با نام phpro ایجاد کنید و یک فایل PHP با نام HelloWorld.php ایجاد کرده و محتویات زیر رو داخلش قرار بدید :

<?php
namespace phpro;

class HelloWorld{

	public function sayHello(){
		return 'Hello World!';
	}

}

 

یک فایل با نام composer.json در پوشه روت یا اصلی پروژه ایجاد کنید.

ساختار پوشه های شما باید به شکل زیر باشه :

root
   src
     phpro
        HelloWorld.php

 

در پوشه root ترمینال یا CMD رو باز کنید و دستور زیر رو بزنید :

composer init

پس از تایپ این دستور از شما چندتا سوال پرسیده میشه که باهم مرور میکنیم این سوالا چیه.

۱ – Package name (<vendor>/<name>) [saeed/composer]: smoqadam/helloworld

اولی سوال مربوط به نام پکیج شماست. این نام باید منحصر به فرد باشه. ما در این آموزش نام smoqadam/helloworld براش انتخاب کردیم.

۲ – Description []: simple composer package

توضیحات مختصر در مورد پکیج

۳ – Author [smoqadam <phpro.ir@gmail.com>] : smoqadam <phpro.ir@gmail.com>

نام ایجاد کننده این پکیج که باید از فرمت داخل [ ] پیروی کنه یا میتونید خالی بذارید. به صورت پیشفرض نام و ایمیل شما موقع نصب و تنظم کردن کامپوزر انتخاب میشه.

۴ – License []: MIT

لایسنس استفاده از این پکیج. که ما MIT رو براش انتخاب کردیم. شما هر چی دوست دارید انتخاب کنید.

۵ – Would you like to define your dependencies (require) interactively [yes]?

اگر پکیج یا کتابخانه شما نیاز به یک کتابخانه دیگه هم برای اجرا داره yes رو تایپ کنید در غیر اینصورت no تایپ کنید

۶ – Would you like to define your dev dependencies (require-dev) interactively [yes]?

سوال بعدی هم در همین مورده که میگه آیا پکیجی که هنوز در مرحله توسعه است رو میخواید به پروژه اضافه کنید یا خیر. که ما دوباره no رو تایپ و اینتر میزنیم!

۷ – در قسمت آخر به شما یه پیش نمایش از خروجی فایل composer.json نمایش میده که در صورت تایید یک فایل با نام composer.json ایجاد میشه و این محتویات داخلش قرار میگیره.

{
    "name": "smoqadam/helloworld",
    "description": "simple composer package",
    "license": "MIT",
    "authors": [
        {
            "name": "smoqadam",
            "email": "phpro.ir@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {

	}
	
}

حالا فایل composer.json رو با یک ویرایشگر باز کنید. بعد از بلاک require کد زیر رو داخلش قرار بدید :

{
    "name": "smoqadam/helloworld",
    "description": "simple composer package",
    "license": "MIT",
    "authors": [
        {
            "name": "smoqadam",
            "email": "phpro.ir@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {

	},"autoload": {
        "psr-0": {
            "phpro": "src/"
        }
    }
}

در قسمت autoload مشخص کردیم که

۱ – پروژه ما از استاندارد psr-0 استفاده میکنه

۲ – namespace ما اسمش phpro

۳ – و کدهارو توی شاخه src قرار دادیم

نکته : برای اطلاع از استانداردهای مختلف اینجا یه سر بزنید.

تا اینجا یک کتابخانه ساختیم و آماده است تا توی کامپوزر یه عنوان یک مخزن جدید قرار بگیره.برای ایجاد مخزن در Composer باید کدهاتون رو در یکی از Version Control ها مانند Git یا SVN قرار بدید. ما برای اینکار از سایت Github استفاده میکنیم.

چون آموزش ایجاد پروژه در کامپوزر هست دیگه در مورد گیت و دستوراتش حرفی نمیزنیم. و اگر نمیدونید Git چیه حتما و حتما در موردش مطالعه کنید.

من پروژه رو توی گیت هاب گذاشتم. از طریق لینک زیر میتونید بهش دسترسی داشته باشید :

https://github.com/smoqadam/composer-test

حالا سایت Packagist.org رو باز کنید. لاگین / ثبت نام کنید. در منوی بالای این سایت روی گزینه Submit کلیک کنید.

در صفحه جدید آدرس پروژه رو توی سایت گیت هاب بدید. که من آدرس پروژه خودمون رو اینجا وارد میکنم :

https://github.com/smoqadam/composer-test

پس از اینکار روی کلید Check کلیک کنید و منتظر باشید تا پروژه شما از روی گیت هاب خوانده و چک بشه. اگر فایل Composer.json شما بدون خطا باشه پروژه شما به راحتی در مخازن کامپوزر قرار میگیریه. اگر خطایی داشته باشه یا اسمی که در قسمت مرحله یک انتخاب کردید تکراری باشه بهتون پیغام خطا رو نشون میده. اگر خطا داشتید باید برگردید اصلاحش کنید و دوباره کدهارو توی گیت هاب push کنید.

پس از اینکه تمام کارهارو بدون خطا انجام دادید به صفحه مخزن هدایت میشید.

حالا کافیه برای استفاده مجدد از کتابخانه ایکه که نوشتیم، توی یک پروژه جدیدمون یک فایل composer.json بسازیم و محتویات زیر رو داخلش قرا بدیم :

{
    "require": {
        "smoqadam/HelloWorld": "dev-master"
    }
}

بعد از اینکار دستور composer install رو اجرا کنید. میبینید که یک پوشه vendor به پروژه شما اضافه میشه و کلاسی که قبلا نوشتیم توی این پوشه قرار میگیره.

حالا برای استفاده از کلاس HelloWorld باید فایل vendor/autoload.php رو require کنید. با اینکار تمام کتابخانه هایی که توسط کامپوزر نصب شدند در دسترس هستند و دیگه نیاز به require کردن های مجدد و خسته کننده نیست.

 

<?php
require 'vendor/autoload.php';
$h = new phpro\HelloWorld();
 echo $h->sayHello();

 

 

امیدوارم که استفاده کرده باشید.

اگر نکته رو از قلم انداختم یا اشتباهی داشتم متذکر بشید و اگر سوالی داشتید در قسمت کامنت ها بپرسید.

موفق باشید

بازدید : ۳۸۶

فروردین ۲۴, ۱۳۹۵ @ ۱:۱۹ ب.ظ

سلام
بسیار عالی
من سایت شما رو دنبال میکنم با اینکه سایت خیلی کم بروز میشه
امکانش هست در مورد GitHub هم موضوع بزارید
که چطور نسخه بندی کرد پروژه رو

پاسخ دادن
ابراهیمی
فروردین ۲۴, ۱۳۹۵ @ ۹:۰۸ ب.ظ

سلام.دستتون درد نکنه.

در مورد psr ها هم میشه توضیحی بدید؟ ممنون میشم

پاسخ دادن
مرداد ۶, ۱۳۹۵ @ ۲:۵۶ ب.ظ

باسلام
ممنون از پست خوبتون.

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*