توسعه بسته
معرفی
بسته ها راه اصلی اضافه کردن قابلیت به لاراول هستند. بستهها ممکن است هر چیزی باشند، از یک روش عالی برای کار با تاریخهایی مانند کربن یا یک چارچوب آزمایشی کامل BDD مانند Behat .
البته پکیج ها انواع مختلفی دارند.
برخی از بسته ها مستقل هستند، یعنی با هر فریم ورکی کار می کنند، نه فقط با لاراول.
هر دو کربن و بهات نمونه هایی از بسته های مستقل هستند.
هر یک از این بسته ها را می توان با درخواست لاراول در
composer.json
فایل خود استفاده کرد.
از سوی دیگر، بسته های دیگر به طور خاص برای استفاده با لاراول در نظر گرفته شده اند. این بستهها ممکن است مسیرها، کنترلکنندهها، نماها و پیکربندیهایی داشته باشند که بهطور خاص برای بهبود برنامه لاراول در نظر گرفته شدهاند. این راهنما در درجه اول توسعه مواردی را که مخصوص لاراول هستند پوشش می دهد.
همه بستههای لاراول از طریق Packagist و Composer توزیع میشوند ، بنابراین یادگیری این ابزارهای فوقالعاده توزیع بسته PHP ضروری است.
بازدیدها
ساختار داخلی بسته شما کاملاً به شما بستگی دارد. با این حال، معمولاً هر بسته حاوی یک یا چند ارائه دهنده خدمات است . ارائهدهنده خدمات شامل هر گونه اتصالات کانتینر سرویس و همچنین دستورالعملهایی در مورد محل قرارگیری پیکربندی بسته، نماها و فایلهای ترجمه است.
بازدیدها
نماهای بسته معمولاً با استفاده از سینتکس "Namspace" دو نقطه ای ارجاع می شوند:
return view('package::view.name');
تنها کاری که باید انجام دهید این است که به لاراول بگویید نماهای یک فضای نام مشخص در کجا قرار دارند.
به عنوان مثال، اگر بسته شما "پیک" نام دارد، می توانید موارد زیر را به
boot
روش ارائه دهنده خدمات خود اضافه کنید:
public function boot(){ $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');}
اکنون می توانید نماهای بسته خود را با استفاده از نحو زیر بارگیری کنید:
return view('courier::view.name');
وقتی از این
loadViewsFrom
روش استفاده می کنید، لاراول در واقع
دو
مکان را برای نماهای شما ثبت می کند: یکی در فهرست برنامه
resources/views/vendor
و دیگری در دایرکتوری که شما مشخص کرده اید.
بنابراین، با استفاده از مثال ما
courier
: هنگام درخواست نمای بسته، لاراول ابتدا بررسی می کند که آیا یک نسخه سفارشی از view توسط توسعه دهنده در ارائه شده است یا خیر
resources/views/vendor/courier
.
سپس، اگر نمای شخصی سازی نشده باشد، لاراول دایرکتوری نمای بسته را که در تماس خود با آن مشخص کرده اید جستجو می کند
loadViewsFrom
.
این امر باعث میشود تا کاربران نهایی بتوانند نماهای بسته شما را سفارشی یا نادیده بگیرند.
انتشار نماها
برای انتشار نماهای بسته خود در دایرکتوری
resources/views/vendor
، باید
publishes
از روش
boot
ارائه دهنده خدمات خود استفاده کنید:
public function boot(){ $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier'); $this->publishes([ __DIR__.'/path/to/views' => base_path('resources/views/vendor/courier'), ]);}
اکنون، زمانی که کاربران بسته شما دستور لاراول را اجرا می کنند
vendor:publish
، دایرکتوری views شما در مکان مشخص شده کپی می شود.
اگر میخواهید فایلهای موجود را بازنویسی کنید، از
--force
سوئیچ استفاده کنید:
php artisan vendor:publish --force
توجه: می توانید از این
publishes
روش برای انتشار هر نوع فایلی در هر مکانی که می خواهید استفاده کنید.
ترجمه ها
فایلهای ترجمه بسته معمولاً با استفاده از نحو دو دونقطه ارجاع میشوند:
return trans('package::file.line');
تنها کاری که باید انجام دهید این است که به لاراول بگویید ترجمه های یک فضای نام مشخص در کجا قرار دارند.
به عنوان مثال، اگر بسته شما "پیک" نام دارد، می توانید موارد زیر را به
boot
روش ارائه دهنده خدمات خود اضافه کنید:
public function boot(){ $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');}
توجه داشته باشید که در
translations
پوشه خود، دایرکتوری های بیشتری برای هر زبان خواهید داشت، مانند
en
،،،
و غیره
es
.
ru
اکنون می توانید ترجمه های بسته خود را با استفاده از نحو زیر بارگیری کنید:
return trans('courier::file.line');
پیکربندی
به طور معمول، شما می خواهید فایل پیکربندی بسته خود را در
config
دایرکتوری خود برنامه منتشر کنید.
این به کاربران بسته شما اجازه می دهد تا به راحتی گزینه های پیکربندی پیش فرض شما را نادیده بگیرند.
برای انتشار یک فایل پیکربندی، فقط
publishes
از روش
boot
ارائه دهنده خدمات خود استفاده کنید:
$this->publishes([ __DIR__.'/path/to/config/courier.php' => config_path('courier.php'),]);
اکنون زمانی که کاربران بسته شما دستور لاراول را اجرا می کنند
vendor:publish
، فایل شما در محل مشخص شده کپی می شود.
البته، هنگامی که پیکربندی شما منتشر شد، می توان به آن مانند هر فایل پیکربندی دیگری دسترسی داشت:
$value = config('courier.option');
همچنین میتوانید فایل پیکربندی بسته خود را با نسخه برنامه ادغام کنید.
این به کاربران شما اجازه میدهد فقط گزینههایی را که واقعاً میخواهند نادیده بگیرند در نسخه منتشر شده پیکربندی قرار دهند.
برای ادغام پیکربندی ها، از
mergeConfigFrom
روش موجود در روش ارائه دهنده خدمات خود استفاده کنید
register
:
$this->mergeConfigFrom( __DIR__.'/path/to/config/courier.php', 'courier');
دارایی های عمومی
بسته های شما ممکن است دارایی هایی مانند جاوا اسکریپت، CSS و تصاویر داشته باشند.
برای انتشار دارایی ها،
publishes
از روش روش ارائه دهنده خدمات خود استفاده کنید
boot
.
در این مثال، یک تگ گروه دارایی "عمومی" را نیز اضافه می کنیم.
$this->publishes([ __DIR__.'/path/to/assets' => public_path('vendor/courier'),], 'public');
اکنون زمانی که کاربران بسته شما
vendor:publish
دستور را اجرا می کنند، فایل های شما در محل مشخص شده کپی می شوند.
از آنجایی که معمولاً باید هر بار که بسته بهروزرسانی میشود، داراییها را بازنویسی کنید، میتوانید از
--force
پرچم استفاده کنید:
php artisan vendor:publish --tag=public --force
اگر می خواهید مطمئن شوید که دارایی های عمومی شما همیشه به روز هستند، می توانید این دستور را به
post-update-cmd
لیست موجود در
composer.json
فایل خود اضافه کنید.
انتشار گروه های فایل
ممکن است بخواهید گروه هایی از فایل ها را جداگانه منتشر کنید. به عنوان مثال، ممکن است بخواهید کاربران شما بتوانند فایل های پیکربندی بسته و فایل های دارایی را به طور جداگانه منتشر کنند. شما می توانید این کار را با "تگ کردن" آنها انجام دهید:
// Publish a config file$this->publishes([ __DIR__.'/../config/package.php' => config_path('package.php')], 'config'); // Publish your migrations$this->publishes([ __DIR__.'/../database/migrations/' => database_path('/migrations')], 'migrations');
سپس میتوانید این فایلها را با ارجاع به برچسب آنها به صورت جداگانه منتشر کنید:
php artisan vendor:publish --provider="Vendor\Providers\PackageServiceProvider" --tag="config"
مسیریابی
برای بارگیری یک فایل مسیرها برای بسته خود،
include
آن را به سادگی از طریق
boot
روش ارائه دهنده خدمات خود انجام دهید.
شامل فایل مسیرها از یک ارائه دهنده خدمات
public function boot(){ include __DIR__.'/../../routes.php';}
توجه: اگر بسته شما از کنترلرها استفاده می کند، باید مطمئن شوید که آنها به درستی در
composer.json
بخش بارگذاری خودکار فایل شما پیکربندی شده اند.