ساخت پکیج لاراول 5 - قسمت سوم

13 خرداد 1398, خواندن در 4 دقیقه

تا قسمت دوم این سری ما راه اندازی اولیه کار رو برای ساخت چند پکیج انجام دادیم. با این حال اگر پکیج شما پیچیده تر باشه نیاز به فایل پیکربندی برای اون دارید. ثانیا باید راهی برای توسعه دهندگان قرار بدید تا بتونند پارامترهای پیکربندی, view ها و سایر امکانات پکیج رو تغییر به شکلی که می خواهند, تغییر بدهند.

پیکربندی

برای شروع مسیر src/config رو بسازید تا فایل های پیکربندی رو داخلش ذخیره کنیم. معمولا ما فقط یک فایل داریم اما من ترجیح میدم بسته به پیچیدگی کار تعداد بیشتری فایل هم داشته باشیم.

// src/config/main.php

return [
    'hello' => 'Hello',
    'world' => 'World',
];

وقتی ما این فایل رو ایجاد کردیم, باید به پکیج بگیم که چطور بارگذاریش کنه. ما این کار رو در service provider ها و متد register انجام میدیم :

public function register()
{
    $this->mergeConfigFrom(
        __DIR__ . '/config/main.php', 'websanova-demo-main'
    );

    ...
}

توجه کنید که ما باید هر فایل رو جداگانه نام گذاری کنیم. اگر شما مطمئن هستید که فقط یک پیکربندی نیاز هست پس برای alias میتونید از اسم پکیج استفاده کنید (اینجا websanova-demo).

و به یک مسیر برای تست نیاز داریم:

Route::get('demo/config', function () {
    return config('websanova-demo-main.hello') . 
           config('websanova-demo-main.world');
});

انتشار پیکربندی ها

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

برای شروع ما یک خط به متد boot فایل service provider که داشتیم اضافه می کنیم تا بهش بگیم چه فایل هایی رو باید منتشر کنه. کدمون یک چیزی شبیه زیر خواهد شد :

public function boot()
{
    $this->publishes([
        __DIR__ . '/config' => config_path('websanova-demo'),
    ]);

    ...
}

ما میتونیم کل مسیر config رو در این پروژه منتشر کنیم. با اجرای دستور vendor:publish این کار انجام میشه و این دستور فایل های پیکربندی پکیج رو در پروژه لاراول کپی می کنه :

> php artisan vendor:publish

اگر شما به پروژه لاراول پیمایش کنید باید فایل config/websanova-demo/main.php رو ملاحظه کنید. اونجا میتونید پارامترها رو به شکل دلخواه تغییر بدید.

انتشار View ها

ما الگویی که مطرح کردیم رو برای view ها هم پیاده سازی می کنیم. با این حال نکته جالب اینه که از اونجایی که ما view ها رو نامگذاری کردیم, فقط باید مسیر رو به متد publishes در پیکربندی مون اضافه کنیم :

$this->publishes([
    __DIR__ . '/views' => base_path('resources/views/vendor/websanova-demo'),
    __DIR__ . '/config' => config_path('websanova-demo'),
]);

مطمئن بشید نام alias همون نام مسیر باشه. این برای لاراول مهمه که بدونه کجا دنبال ورژن اپ محلی فایل بگرده.

ما اینجا میتونیم دستور vendor:publish رو یکبار دیگه اجرا کنیم. توجه کنید که این دستور هیچ فایل موجودی رو بازنویسی نمی کنه.

> php artisan vendor:publish

انتشار و گروه های مجبوری

وقتی ما یک پکیج رو تست می کنیم, مخصوصا با migration ها, ممکنه شما نیاز داشته باشید چندین بار پکیج تون رو منتشر کنید. شما میتونید از گزینه force-- در این مورد استفاده کنید. فقط توجه کنید که با استفاده از این گزینه تمام تغییرات محلی در اپلیکیشن بازنویسی می شوند.

 > php artisan vendor:publish --force

یکی دیگر از گزینه های مفید اینه که فایل های قابل انتشارتون رو گروه بندی کنید. این به شما اجازه میده فقط یک گروه از فایل ها رو منتشر کنید و در مورد کار با migration ها هم بهتر عمل میکنه :

public function boot()
{
    $this->publishes([
        __DIR__ . '/views' => base_path('resources/views/vendor/websanova-demo')
    ], 'views');

    $this->publishes([
        __DIR__ . '/config' => config_path('websanova-demo')
    ], 'config');

    ...
}

علاوه بر این, ما میتونیم از یک provider برای جلوگیری از انتشار تمام پکیج ها و تمرکز روی یک پکیج خاص استفاده کنیم. همچنین یکی دیگر از مزیت های force-- اینه که ما ممکنه نخواهیم سایر پکیج هایی که تست می کنیم رو بازنویسی کنیم.

> php artisan vendor:publish --provider="Websanova\Demo\DemoServiceProvider" --tag=config --force

اینکار زحمت زیادی نمی بره, پس بهتره متدهای publishes رو در این راه سازماندهی کنید. این کار یک لایه منعطف دیگر برای توسعه دهندگان فراهم می کنه.

شما میتونید از الگوی مطرح شده برای انتشار پکیج های دیگر مثل جاوا اسکریپت و css و فایل های ترجمه استفاده کنید. برای مطالعه بیشتر در این زمینه از Laravel 5.x package docs استفاده کنید.

در قسمت بعدی از این سری مقالات سراغ بحث دیتابیس می رویم.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید