نسخه:

توسعه بسته

معرفی

بسته ها راه اصلی اضافه کردن قابلیت به لاراول هستند. بسته‌ها ممکن است هر چیزی باشند، از یک روش عالی برای کار با تاریخ‌هایی مانند کربن یا یک چارچوب آزمایشی کامل BDD مانند Behat .

البته پکیج ها انواع مختلفی دارند. برخی از بسته ها مستقل هستند، یعنی با هر فریم ورکی کار می کنند، نه فقط با لاراول. هر دو کربن و بهات نمونه هایی از بسته های مستقل هستند. هر یک از این بسته ها را می توان با درخواست لاراول در composer.json فایل خود استفاده کرد.

از سوی دیگر، بسته های دیگر به طور خاص برای استفاده با لاراول در نظر گرفته شده اند. در نسخه های قبلی لاراول به این نوع بسته ها «باندل» می گفتند. این بسته‌ها ممکن است مسیرها، کنترل‌کننده‌ها، نماها، پیکربندی و مهاجرت‌هایی داشته باشند که به‌طور خاص برای بهبود برنامه لاراول طراحی شده‌اند. از آنجایی که برای توسعه بسته‌های مستقل نیازی به فرآیند خاصی نیست، این راهنما در درجه اول توسعه بسته‌هایی را که مختص لاراول هستند پوشش می‌دهد.

همه بسته‌های لاراول از طریق Packagist و Composer توزیع می‌شوند ، بنابراین یادگیری این ابزارهای فوق‌العاده توزیع بسته PHP ضروری است.

ایجاد یک بسته

ساده ترین راه برای ایجاد یک بسته جدید برای استفاده با لاراول workbench دستور Artisan است. ابتدا باید چند گزینه در app/config/workbench.php فایل تنظیم کنید. name در آن فایل، گزینه و را خواهید دید email . composer.json این مقادیر برای ایجاد یک فایل برای بسته جدید شما استفاده خواهد شد . هنگامی که آن مقادیر را ارائه کردید، آماده ساختن یک بسته میز کار هستید!

صدور فرمان صنعتگر میز کار

php artisan workbench vendor/package --resources

نام فروشنده راهی برای متمایز کردن بسته شما از سایر بسته های همنام از نویسندگان مختلف است. به عنوان مثال، اگر من (تیلور اتول) یک بسته جدید به نام "Zapper" ایجاد کنم، نام فروشنده می تواند Taylor در حالی که نام بسته باشد Zapper . به طور پیش‌فرض، میز کار بسته‌های فریمورک آگنوستیک ایجاد می‌کند. با این حال، resources دستور به میز کار می گوید که بسته را با دایرکتوری های خاص لاراول مانند migrations ،،، و غیره تولید کند views . config

پس از workbench اجرای دستور، بسته شما در دایرکتوری workbench نصب لاراول شما در دسترس خواهد بود. در مرحله بعد، باید بسته ای را ServiceProvider که برای بسته شما ایجاد شده است، ثبت کنید. می توانید ارائه دهنده را با افزودن آن به providers آرایه موجود در app/config/app.php فایل ثبت کنید. این به لاراول دستور می دهد تا بسته شما را هنگام شروع برنامه بارگیری کند. ارائه دهندگان خدمات از یک [Package]ServiceProvider قرارداد نامگذاری استفاده می کنند. بنابراین، با استفاده از مثال بالا، می توانید Taylor\Zapper\ZapperServiceProvider به providers آرایه اضافه کنید.

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

توجه: اگر ارائه دهنده سرویس شما یافت نشد، php artisan dump-autoload دستور را از دایرکتوری ریشه برنامه خود اجرا کنید

ساختار بسته

هنگام استفاده از workbench دستور، بسته شما با قراردادهایی تنظیم می شود که به بسته اجازه می دهد تا به خوبی با سایر بخش های چارچوب لاراول ادغام شود:

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

/src
/Vendor
/Package
PackageServiceProvider.php
/config
/lang
/migrations
/views
/tests
/public

بیایید این ساختار را بیشتر بررسی کنیم. دایرکتوری src/Vendor/Package خانه همه کلاس های بسته شما از جمله ServiceProvider . config همانطور که ممکن است حدس بزنید ، دایرکتوری ها lang ، migrations و views دایرکتوری ها حاوی منابع مربوط به بسته شما هستند. بسته‌ها ممکن است هر یک از این منابع را داشته باشند، درست مانند برنامه‌های معمولی.

ارائه دهندگان خدمات

ارائه دهندگان خدمات به سادگی کلاس های بوت استرپ برای بسته ها هستند. به طور پیش فرض، آنها شامل دو روش هستند: boot و register . در این روش‌ها می‌توانید هر کاری را که دوست دارید انجام دهید: شامل یک فایل مسیرها، ثبت اتصالات در ظرف IoC، پیوست کردن به رویدادها یا هر چیز دیگری که می‌خواهید انجام دهید.

این register متد بلافاصله زمانی که ارائه دهنده خدمات ثبت می شود فراخوانی می شود، در حالی که boot فرمان فقط قبل از مسیریابی درخواست فراخوانی می شود. بنابراین، اگر اقدامات در ارائه‌دهنده خدمات شما متکی به ارائه‌دهنده خدمات دیگری است که قبلاً ثبت شده است، یا شما خدمات محدود شده توسط ارائه‌دهنده دیگری را لغو می‌کنید، باید از این boot روش استفاده کنید.

هنگام ایجاد یک بسته با استفاده از دستور workbench ، boot از قبل شامل یک عمل خواهد بود:

$this->package('vendor/package');

این روش به لاراول اجازه می دهد تا بداند چگونه نماها، پیکربندی و سایر منابع را برای برنامه شما به درستی بارگذاری کند. به طور کلی، نیازی به تغییر این خط کد نیست، زیرا بسته را با استفاده از قراردادهای میز کار تنظیم می کند.

به طور پیش فرض، پس از ثبت یک بسته، منابع آن با استفاده از "بسته" نیمی از vendor/package . با این حال، ممکن است یک آرگومان دوم را به متد ارسال کنید package تا این رفتار را لغو کند. مثلا:

// Passing custom namespace to package method
$this->package('vendor/package', 'custom-namespace');
 
// Package resources now accessed via custom-namespace
$view = View::make('custom-namespace::foo');

یک "موقعیت پیش فرض" برای کلاس های ارائه دهنده خدمات وجود ندارد. می توانید آنها را در هر جایی که دوست دارید قرار دهید، شاید آنها را در Providers فضای نامی در فهرست خود سازماندهی کنید app . فایل ممکن است در هر جایی قرار گیرد، تا زمانی که امکانات بارگیری خودکار Composer بدانند که چگونه کلاس را بارگذاری کنند.

اگر مکان منابع بسته خود را تغییر داده اید، مانند فایل های پیکربندی یا نماها، باید آرگومان سومی را به روشی ارسال کنید package که مکان منابع شما را مشخص می کند:

$this->package('vendor/package', null, '/path/to/resources');

ارائه دهندگان معوق

اگر در حال نوشتن ارائه‌دهنده خدماتی هستید که هیچ منبعی مانند پیکربندی یا نماها را ثبت نمی‌کند، می‌توانید ارائه‌دهنده خود را "به تعویق انداخته" کنید. یک ارائه‌دهنده خدمات معوق تنها زمانی بارگیری و ثبت می‌شود که یکی از خدماتی که ارائه می‌دهد واقعاً مورد نیاز کانتینر IoC برنامه باشد. اگر هیچ یک از خدمات ارائه دهنده برای یک چرخه درخواست معین مورد نیاز نباشد، ارائه دهنده هرگز بارگیری نمی شود.

برای به تعویق انداختن اجرای ارائه‌دهنده خدمات خود، defer ویژگی ارائه‌دهنده را روی true :

protected $defer = true;

در مرحله بعد باید provides متد را از کلاس پایه لغو کنید Illuminate\Support\ServiceProvider و آرایه ای از تمام اتصالاتی را که ارائه دهنده شما به ظرف IoC اضافه می کند، برگردانید. به عنوان مثال، اگر ارائه دهنده شما ثبت نام کرده package.service و package.another-service در ظرف IoC است، provides روش شما باید به این صورت باشد:

public function provides()
{
return array('package.service', 'package.another-service');
}

قراردادهای بسته

هنگام استفاده از منابع یک بسته، مانند آیتم های پیکربندی یا نماها، معمولاً از یک نحو دو نقطه ای استفاده می شود:

بارگیری نمای از یک بسته

return View::make('package::view.name');

بازیابی آیتم پیکربندی بسته

return Config::get('package::group.option');

توجه: اگر بسته شما حاوی مهاجرت است، پیشوند نام مهاجرت را با نام بسته خود در نظر بگیرید تا از تداخل احتمالی نام کلاس با بسته های دیگر جلوگیری کنید.

گردش کار توسعه

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

پس از اینکه workbench دستور بسته شما را ایجاد کرد. شما می توانید git init از workbench/[vendor]/[package] دایرکتوری و git push بسته خود را مستقیما از روی میز کار! این به شما این امکان را می دهد که بسته را به راحتی در یک زمینه برنامه توسعه دهید بدون اینکه توسط دستورات ثابت درگیر شوید composer update .

از آنجایی که بسته های شما در workbench دایرکتوری هستند، ممکن است تعجب کنید که Composer چگونه می داند فایل های بسته شما را به صورت خودکار بارگذاری کند. وقتی workbench دایرکتوری وجود داشته باشد، لاراول به طور هوشمند آن را برای بسته ها اسکن می کند و فایل های بارگذاری خودکار Composer آنها را با شروع برنامه بارگیری می کند!

اگر می‌خواهید فایل‌های بارگذاری خودکار بسته خود را بازسازی کنید، می‌توانید از php artisan dump-autoload دستور استفاده کنید. این دستور فایل های بارگذاری خودکار را برای پروژه ریشه شما و همچنین هر میز کاری که ایجاد کرده اید را بازسازی می کند.

اجرای فرمان Autoload Artisan

php artisan dump-autoload

مسیریابی بسته

در نسخه های قبلی لاراول، یک handles بند برای مشخص کردن URI هایی که بسته می تواند به آن پاسخ دهد استفاده می شد. با این حال، در لاراول 4، یک بسته ممکن است به هر URI پاسخ دهد. برای بارگیری یک فایل مسیرها برای بسته خود، include آن را به سادگی از طریق boot روش ارائه دهنده خدمات خود انجام دهید.

شامل فایل مسیرها از یک ارائه دهنده خدمات

public function boot()
{
$this->package('vendor/package');
 
include __DIR__.'/../../routes.php';
}

توجه: اگر بسته شما از کنترلرها استفاده می کند، باید مطمئن شوید که آنها به درستی در composer.json بخش بارگذاری خودکار فایل شما پیکربندی شده اند.

پیکربندی بسته

دسترسی به فایل های پیکربندی بسته

برخی از بسته ها ممکن است به فایل های پیکربندی نیاز داشته باشند. این فایل ها باید مانند فایل های پیکربندی برنامه معمولی تعریف شوند. و هنگام استفاده از $this->package روش پیش‌فرض ثبت منابع در ارائه‌دهنده خدمات، ممکن است با استفاده از نحو معمول "دو نقطه" قابل دسترسی باشد:

Config::get('package::file.option');

دسترسی به پیکربندی بسته فایل واحد

با این حال، اگر بسته شما حاوی یک فایل پیکربندی واحد است، می‌توانید به سادگی نام فایل را بگذارید config.php . وقتی این کار انجام شد، می‌توانید مستقیماً به گزینه‌ها دسترسی داشته باشید، بدون اینکه نام فایل را مشخص کنید:

Config::get('package::option');

ثبت نام فضای نام منبع به صورت دستی

گاهی اوقات، ممکن است بخواهید منابع بسته مانند نماها را خارج از $this->package روش معمولی ثبت کنید. به طور معمول، این کار تنها در صورتی انجام می شود که منابع در یک مکان معمولی نباشند. برای ثبت منابع به صورت دستی، می توانید addNamespace از متد View , Lang و Config کلاس ها استفاده کنید:

View::addNamespace('package', __DIR__.'/path/to/views');

پس از ثبت نام فضای نام، می توانید از نام فضای نام و نحو "دو نقطه" برای دسترسی به منابع استفاده کنید:

return View::make('package::view.name');

امضای متد برای در کلاس های ، و addNamespace یکسان است . View Lang Config

فایل های پیکربندی آبشاری

وقتی سایر توسعه دهندگان بسته شما را نصب می کنند، ممکن است بخواهند برخی از گزینه های پیکربندی را لغو کنند. با این حال، اگر مقادیر کد منبع بسته شما را تغییر دهند، دفعه بعد که Composer بسته را به‌روزرسانی می‌کند، بازنویسی می‌شوند. در عوض، config:publish دستور artisan باید استفاده شود:

php artisan config:publish vendor/package

هنگامی که این دستور اجرا می شود، فایل های پیکربندی برنامه شما در app/config/packages/vendor/package جایی کپی می شوند که می توانند با خیال راحت توسط توسعه دهنده تغییر کنند!

توجه: توسعه‌دهنده همچنین ممکن است فایل‌های پیکربندی محیطی خاص را با قرار دادن آنها در بسته شما ایجاد کند app/config/packages/vendor/package/environment .

نماهای بسته

اگر از بسته ای در برنامه خود استفاده می کنید، ممکن است گاهی بخواهید نماهای بسته را سفارشی کنید. app/views با استفاده از دستور Artisan به راحتی می توانید نماهای بسته را به دایرکتوری خود صادر کنید view:publish :

php artisan view:publish vendor/package

این دستور نماهای بسته را به app/views/packages دایرکتوری منتقل می کند. اگر این دایرکتوری از قبل وجود نداشته باشد، هنگام اجرای دستور ایجاد می شود. پس از انتشار دیدگاه ها، می توانید آنها را به دلخواه تغییر دهید! نماهای صادر شده به طور خودکار بر فایل های مشاهده خود بسته اولویت دارند.

مهاجرت های بسته

ایجاد مهاجرت برای بسته‌های میز کار

شما می توانید به راحتی برای هر یک از بسته های خود مهاجرت ایجاد و اجرا کنید. برای ایجاد یک مهاجرت برای یک بسته در میز کار، از --bench گزینه استفاده کنید:

php artisan migrate:make create_users_table --bench="vendor/package"

اجرای مهاجرت برای بسته‌های میز کار

php artisan migrate --bench="vendor/package"

اجرای مهاجرت برای یک بسته نصب شده

برای اجرای مهاجرت برای یک بسته تمام شده که از طریق Composer در دایرکتوری نصب شده است vendor ، می توانید از --package دستورالعمل استفاده کنید:

php artisan migrate --package="vendor/package"

دارایی های بسته

انتقال دارایی های بسته به عمومی

برخی از بسته ها ممکن است دارایی هایی مانند جاوا اسکریپت، CSS و تصاویر داشته باشند. با این حال، ما نمی‌توانیم به دارایی‌های موجود در vendor یا دایرکتوری‌ها پیوند دهیم، بنابراین به راهی برای انتقال این دارایی‌ها به فهرست برنامه‌مان workbench نیاز داریم . public دستور asset:publish این کار را برای شما انجام می دهد:

php artisan asset:publish
 
php artisan asset:publish vendor/package

اگر بسته هنوز در داخل است workbench ، از --bench دستورالعمل استفاده کنید:

php artisan asset:publish --bench="vendor/package"

این دستور دارایی ها را public/packages با توجه به فروشنده و نام بسته به دایرکتوری منتقل می کند. بنابراین، بسته ای به نام userscape/kudos دارایی های آن به public/packages/userscape/kudos . استفاده از این قرارداد انتشار دارایی به شما امکان می دهد مسیرهای دارایی را با خیال راحت در نماهای بسته خود کدنویسی کنید.

بسته های انتشاراتی

هنگامی که بسته شما آماده انتشار است، باید بسته را به مخزن Packagist ارسال کنید . اگر بسته مخصوص لاراول است، یک laravel برچسب به فایل بسته خود اضافه کنید composer.json .

همچنین، برچسب‌گذاری نسخه‌های خود مؤدبانه و مفید است تا توسعه‌دهندگان بتوانند هنگام درخواست بسته شما در composer.json فایل‌های خود به نسخه‌های پایدار وابسته باشند. اگر نسخه پایدار آماده نیست، از branch-alias دستورالعمل Composer استفاده کنید.

هنگامی که بسته شما منتشر شد، با خیال راحت به توسعه آن در زمینه برنامه ایجاد شده توسط ادامه دهید workbench . این یک راه عالی برای ادامه توسعه راحت بسته حتی پس از انتشار آن است.

برخی از سازمان ها انتخاب می کنند که مخزن خصوصی بسته های خود را برای توسعه دهندگان خود میزبانی کنند. اگر علاقه مند به انجام این کار هستید، مستندات پروژه Satis را که توسط تیم Composer ارائه شده است، بررسی کنید.