در ۵ دقیقه پکیج خودتون رو در فریمورک لاراول بسازید (Laravel 5.8)

سلام، بعد مدتها تصمیم گرفتم سعی کنم این عادت نوشتن رو تمرین کنم و چیزهایی که یاد میگیرم رو به وبلاگم اضافه کنم. اخیرا چند روزی درگیر ایجاد و ساختن پکیج تو لاراول بودم. با اینکه خیلی سادست، چند روز واقعا ذهنمو درگیر کرد، همه ریفرنس ها رو خوندم فارسی و انگلیسی، چیزی از قلم افتاده بود اما نمیدونستم چی، حتی نمیدونستم چی رو سرچ کنم! برای حل مشکل تا میتونستم خواستمو ساده کردم همه چیو حذف کردم تا رسیدم به اینکه فقط یک route داشته باشم و نه بیشتر! حتی اسم وندور رو هم که با دش جدا بود تک کلمه ای کردم. مواردی هم بودن که باعث گمراهی من شدن، جلوتر همه رو میگم. بریم که شروع کنیم.

ایجاد پروژه

اول از همه از کد زیر استفاده کنین و یه پروژه جدید ایجاد کنین، من اینجا از لاراول ۵.۸ استفاده کردم (یا پروژه فعلی خودتون رو انتخاب کنین)

composer create-project --prefer-dist laravel/laravel blog "5.8.*"

۲. ساختار فایل ها

مثل تصویر زیر فولدر هایی رو بصورت تو درتو برای پروژه ایجاد کنین. ساختار به این صورت باید باشه که داخل فولدر پروژه فولدر packages ایجاد میکنیم که همه پکیج های ما داخل این فولدر قرار میگیره. حالا داخل فولدر packages فولدری دیگه که وندور ما هستُ vendor میتونه اسم خودتون، نام کاربریتون در گیت هاب باشه. و در آخر هم فولدری با نام پکیجتون ایجاد کنین. در اینجا من نام پکیجم رو easy-comment گذاشتم و داخل این فولدر هم یک فولدر با نام src که محل قرار گیری همه کد های ماست ایجاد کنید. پس تا اینجا ساختار فولدر های من به این صورته:

larave-blog/packages/hamidreza-mozhdeh/easy-comment/src

ساختار فولدر ها برای ایجاد پکیج در لاراول

۳. راه اندازی کومپوزر

از طریق ترمینال وارد فولدر پکیجتون به آدرس packages/hamidreza-mozhdeh/easy-comment   بشین و دستور composer init   بزنین تا یک فایل کامپوزر جدید ایجاد کنیم. کومپوزر از شما سوالاتی میپرسه که اگر خواستین وارد کنین و اگر نه فقط اینتر بزنین تا آخر. بعدا هم میتونین اطلاعات رو ویرایش و تکمیل کنین. در آخر فایل ما به آدرس زیر ایجاد شده:

سوالاتی که بعد composer init پرسیده میشه

packages/hamidreza-mozhdeh/easy-comment/composer.json

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

{
    "name": "hamidreza-mozhdeh/easy-comment",
    "authors": [
        {
            "name": "Hamidreza Mozhdeh",
            "email": "hamidreza87m@gmail.com"
        }
    ],
    "require": {}
}

حالا برای اینکه مسیر فولدر منبع (که همه کدهامون داخل اونه) رو به کومپوزر معرفی کنیم کد زیر رو واردش میکنیم

{
    "name": "hamidreza-mozhdeh/easy-comment",
    "authors": [
        {
            "name": "Hamidreza Mozhdeh",
            "email": "hamidreza87m@gmail.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "HamidrezaMozhdeh\\EasyComment\\": "src/"
        }
    },
    "require": {}
}

دقت کنین که بعد نام وندور دابل بک اسلش داریم // و همینطور بعد نام پکیجمون هم دابل بک اسلش داریم // شاید متوجه شده باشین نام فولدر وندورم با نام وندوری که اینجا وارد کردم فرق داره! خب من میخواستم نام فولدرم زیبا باشه و با دش از هم جدا کردم. اما چیزی که اینجا وارد میشه namespace پکیج ما هست و نمیتونیم از دش استفاده کنیم. برای اینکار من کمل کبس نوشتم (و استانداری که رعایت میکنند هم همینه). و باز هم دقت کنین که ما هنوز فایل این namespace رو نساختیم و جلوتر میسازیمش. و در نهایت بعد فولدر src هم انتهاش یک فوروادر اسلش اضافه کنین.

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

  "autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
    "psr-4": {
      "App\\": "app/",
      "HamidrezaMozhdeh\\EasyComment\\": "packages/hamidreza-mozhdeh/easy-comment/src/"
    }
  },

 

این قسمت خیلی شبیه composer پکیج بود با این تفاوت که آدرس رو کاملتر دادیم اینجا.

۴. ایجاد سرویس پروایدر Service Provider

حالا ما نیاز داریم یک سرویس پروایدر بسازیم که متد ها کلاس ها و فایل ها و… رو از طریق اون فراخونی کنیم. در اینجا ما فقط میخوایم یک روت تعریف کنیم که آیا پکیجمون کار میکنه یانه. برای ایجاد پرواید به دو صورت دستی یا php artisan میشه کار کرد که من دومی رو ترجیح میدم. پس تو ترمینال بزنین:

php artisan make:provider EasyCommentServiceProvider

حالا فایل رو از app/providers   به packages/hamidreza-mozhdeh/easy-comment/src   منتقل کنین. دقت کنین که باید namespace اون رو هم عوض کنین به چیزی که قبلا تعریف کردیم تو کومپوزر تغییر بدیم، من داخل متند boot این فایل روت جدیدی رو لود کردم. برای لود بقیه چیزها اینجا رو نگاه کنین.

<?php

namespace HamidrezaMozhdeh\EasyComment;

use Illuminate\Support\ServiceProvider;

class EasyCommentServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        $this->loadRoutesFrom(__DIR__.'/routes.php');
    }
}

کتار همین فایل EasyCommentServiceProvider یک فایل دیگه با نام routes.php ایجاد کنید و یک روت مثل web.php داخلش تعریف میکنیم که میشه به آدرس packages/hamidreza-mozhdeh/easy-comment/src/routes.php

<?php

Route::get('testing-new-package', function () {
    return '<h1>Hello world</h1>';
});

آخرین کار باقی مونده اینه که داخل فایل config/app.php داخل آرایه providers پروایدر خودمونو تعریف کنیم.

HamidrezaMozhdeh\EasyComment\EasyCommentServiceProvider::class,
۵. آخرین مرحله و پایان

در نهایت دستور composer dump-autoload  رو بزنین تا فایل های جدید لود بشن. اگر تا اینجا اومدین و کارهارو انجام دادین پکیجتون ایجاد شده ولی الان فقط تست مونده که خیالمون راحت بشه.

چیزی که من شخصا خیلی سرش گیر کردم و جایی اشاره ای بهش نکرده بود که یادتون باشه در این مرحله حتما php artisan config:clear  هم بزنین.

php artisan serve رو بزنین و روت http://127.0.0.1:8000/testing-new-package  رو باز کنین. اگر تا اینجا همه چیز رو درست انجام داده باشین نتیجه رو میبینین.

سعی کردم تا اینجا ساده ترین و ابتدایی ترین راه برای شروع رو توضیح بدم، بازهم سعی میکنم این مقاله رو با پچ های جدید بروز رسانی کنم و ارتقاش بدم. تا همینجا اصل کار انجام شده و شما میتونین خیلی راحت و سریع توسعش بدین. کافیه یه فولدر بزنین مایگریشن و https://laravel.com/docs/5.8/packages#migrations  رو به پروایدر اضافه کنین یا فولدر ویو های خودتونو بسازین و اینو به پروایدر اضافه کنین (همونجایی که روت هست) https://laravel.com/docs/5.8/packages#views

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

    $this->publishes([
        __DIR__.'/path/to/views' => resource_path('views/vendor/courier'),
    ]);

 

موفق باشید

منابع:

Laravel 5.8 Package Development

ساخت پکیج‌‌ها در فریم‌ورک لاراول

Build Your Own Laravel Package in 10 Minutes Using Composer

2 دیدگاه در “در ۵ دقیقه پکیج خودتون رو در فریمورک لاراول بسازید (Laravel 5.8)”

  1. حمید جان، اون قسمتی که قراره توی composer.json اصلی پروژه، آدرس پکیج رو بدی، چرا فقط آدرس پوشه App رو دادی. فکر کنم حواست نبوده.

دیدگاهتان را بنویسید

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

یک × 2 =