توسعه بسته
- معرفی
- ایجاد یک بسته
- ساختار بسته
- ارائه دهندگان خدمات
- ارائه دهندگان معوق
- قراردادهای بسته
- گردش کار توسعه
- مسیریابی بسته
- پیکربندی بسته
- نماهای بسته
- مهاجرت های بسته
- دارایی های بسته
- بسته های انتشاراتی
معرفی
بسته ها راه اصلی اضافه کردن قابلیت به لاراول هستند. بستهها ممکن است هر چیزی باشند، از یک روش عالی برای کار با تاریخهایی مانند کربن یا یک چارچوب آزمایشی کامل 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 ارائه شده است، بررسی کنید.