یادداشت های انتشار
طرح نسخه سازی
لاراول و سایر بستههای شخص اول آن از Semantic Versioning پیروی میکنند . نسخه های اصلی فریم ورک هر شش ماه یکبار (فوریه و آگوست) منتشر می شوند، در حالی که نسخه های فریمورک و پچ ممکن است هر هفته منتشر شوند. نسخه های جزئی و پچ هرگز نباید حاوی تغییرات شکسته باشند.
هنگام ارجاع به چارچوب لاراول یا اجزای آن از برنامه یا بسته خود، همیشه باید از یک محدودیت نسخه مانند استفاده کنید
^6.0
، زیرا نسخه های اصلی لاراول شامل تغییرات شکسته می شوند. با این حال، ما تلاش میکنیم همیشه اطمینان حاصل کنیم که میتوانید یک نسخه اصلی جدید را در یک روز یا کمتر بهروزرسانی کنید.
خط مشی پشتیبانی
برای نسخه های LTS، مانند لاراول 6، رفع اشکال به مدت 2 سال و رفع امنیتی برای 3 سال ارائه می شود. این نسخه ها طولانی ترین پنجره پشتیبانی و نگهداری را فراهم می کنند. برای نسخههای عمومی، رفع اشکال به مدت ۶ ماه و رفعهای امنیتی برای ۱ سال ارائه میشود. برای همه کتابخانههای اضافی، از جمله Lumen، فقط آخرین نسخه رفع اشکال میشود. علاوه بر این، لطفاً نسخه های پایگاه داده پشتیبانی شده توسط لاراول را بررسی کنید .
نسخه | رهایی | رفع اشکال تا زمانی که | رفع امنیتی تا |
---|---|---|---|
5.5 (LTS) | 30 آگوست 2017 | 30 آگوست 2019 | 30 آگوست 2020 |
5.6 | 7 فوریه 2018 | 7 آگوست 2018 | 7 فوریه 2019 |
5.7 | 4 سپتامبر 2018 | 4 مارس 2019 | 4 سپتامبر 2019 |
5.8 | 26 فوریه 2019 | 26 آگوست 2019 | 26 فوریه 2020 |
6 (LTS) | 3 سپتامبر 2019 | 3 سپتامبر 2021 | 3 سپتامبر 2022 |
لاراول 6
لاراول 6 (LTS) با معرفی نسخهسازی معنایی، سازگاری با
Laravel Vapor
، پاسخهای مجوز بهبودیافته، میانافزارهای شغلی، مجموعههای تنبل، بهبودهای فرعی، استخراج داربستهای فرانتاند در
laravel/ui
بسته Composer و انواع دیگر، به بهبودهای ایجاد شده در لاراول 5.8 ادامه میدهد.
رفع اشکال و بهبود قابلیت استفاده.
نسخه سازی معنایی
بسته چارچوب لاراول (
laravel/framework
) اکنون از استاندارد
نسخهسازی معنایی
پیروی میکند . این باعث می شود که چارچوب با سایر بسته های Laravel شخص اول که قبلاً از این استاندارد نسخه سازی پیروی می کردند سازگار باشد. چرخه انتشار لاراول بدون تغییر باقی خواهد ماند.
سازگاری بخار لاراول
Laravel Vapor توسط Taylor Otwell ساخته شد .
لاراول 6 با Laravel Vapor ، یک پلت فرم استقرار بدون سرور با مقیاس خودکار برای لاراول سازگاری دارد . Vapor پیچیدگی مدیریت برنامههای لاراول در AWS Lambda و همچنین ارتباط آن برنامهها با صفهای SQS، پایگاههای داده، خوشههای Redis، شبکهها، CloudFront CDN و موارد دیگر را خلاصه میکند.
استثناهای بهبود یافته از طریق احتراق
لاراول 6 با Ignition عرضه می شود ، یک صفحه جزییات استثنای منبع باز جدید که توسط Freek Van der Herten و Marcel Pociot ایجاد شده است. Ignition مزایای زیادی نسبت به نسخههای قبلی ارائه میکند، مانند بهبود فایل خطای Blade و مدیریت شماره خط، راهحلهای قابل اجرا برای مشکلات رایج، ویرایش کد، اشتراکگذاری استثنا، و UX بهبودیافته.
پاسخ های مجوز بهبود یافته
پاسخهای مجوز بهبودیافته توسط گری گرین اجرا شد .
در نسخه های قبلی لاراول، بازیابی و افشای پیام های مجوز سفارشی برای کاربران نهایی دشوار بود. این امر توضیح دقیق دلیل رد شدن یک درخواست خاص را برای کاربران نهایی دشوار می کرد. در لاراول 6، این کار اکنون با استفاده از پیام های پاسخ مجوز و روش جدید بسیار آسان تر است
Gate::inspect
. به عنوان مثال، با توجه به روش سیاست زیر:
/** * Determine if the user can view the given flight. * * @param \App\User $user * @param \App\Flight $flight * @return mixed */public function view(User $user, Flight $flight){ return $this->deny('Explanation of denial.');}
پاسخ و پیام خط مشی مجوز ممکن است به راحتی با استفاده از
Gate::inspect
روش زیر بازیابی شود:
$response = Gate::inspect('view', $flight); if ($response->allowed()) { // User is authorized to view the flight...} if ($response->denied()) { echo $response->message();}
$this->authorize
علاوه بر این، هنگام استفاده از روشهای کمکی مانند
Gate::authorize
مسیرها یا کنترلکنندهها،
این پیامهای سفارشی بهطور خودکار به جلوی شما بازگردانده میشوند .
میان افزار شغلی
میان افزارهای شغلی توسط تیلور اتول پیاده سازی شدند .
میانافزارهای شغلی به شما این امکان را میدهند که منطق سفارشی را حول اجرای کارهای در صف بپیچید، و باعث کاهش حجم دیگ در خود کارها میشود. به عنوان مثال، در نسخههای قبلی لاراول، ممکن است منطق
handle
روش یک کار را در یک تماس با نرخ محدود قرار داده باشید:
/** * Execute the job. * * @return void */public function handle(){ Redis::throttle('key')->block(0)->allow(1)->every(5)->then(function () { info('Lock obtained...'); // Handle job... }, function () { // Could not obtain lock... return $this->release(5); });}
در لاراول 6، این منطق ممکن است در یک میان افزار شغلی استخراج شود و به شما این امکان را می دهد که
handle
روش کار خود را عاری از هر گونه مسئولیت محدود کننده نرخ نگه دارید:
<?php namespace App\Jobs\Middleware; use Illuminate\Support\Facades\Redis; class RateLimited{ /** * Process the queued job. * * @param mixed $job * @param callable $next * @return mixed */ public function handle($job, $next) { Redis::throttle('key') ->block(0)->allow(1)->every(5) ->then(function () use ($job, $next) { // Lock obtained... $next($job); }, function () use ($job) { // Could not obtain lock... $job->release(5); }); }}
پس از ایجاد میان افزار، ممکن است با بازگرداندن آنها از روش کار، به یک کار متصل شوند
middleware
:
use App\Jobs\Middleware\RateLimited; /** * Get the middleware the job should pass through. * * @return array */public function middleware(){ return [new RateLimited];}
مجموعه های تنبل
مجموعه های تنبل توسط جوزف سیلبر اجرا شد .
بسیاری از توسعه دهندگان در حال حاضر از روش های مجموعه
قدرتمند لاراول لذت می برند
. برای تکمیل کلاس قدرتمند قبلی
Collection
، لاراول 6 یک را معرفی میکند که از
ژنراتورهای
LazyCollection
PHP استفاده میکند
تا به شما امکان میدهد با مجموعه دادههای بسیار بزرگ کار کنید و در عین حال مصرف حافظه را کم نگه دارید.
به عنوان مثال، تصور کنید برنامه شما نیاز به پردازش یک فایل لاگ چند گیگابایتی دارد در حالی که از روش های مجموعه لاراول برای تجزیه لاگ ها استفاده می کند. به جای خواندن یکباره کل فایل در حافظه، ممکن است از مجموعههای تنبل استفاده شود تا در یک زمان معین فقط بخش کوچکی از فایل را در حافظه نگه دارند:
use App\LogEntry;use Illuminate\Support\LazyCollection; LazyCollection::make(function () { $handle = fopen('log.txt', 'r'); while (($line = fgets($handle)) !== false) { yield $line; }})->chunk(4)->map(function ($lines) { return LogEntry::fromLines($lines);})->each(function (LogEntry $logEntry) { // Process the log entry...});
یا تصور کنید که باید از طریق 10000 مدل Eloquent تکرار کنید. هنگام استفاده از مجموعه های سنتی لاراول، همه 10000 مدل Eloquent باید به طور همزمان در حافظه بارگذاری شوند:
$users = App\User::all()->filter(function ($user) { return $user->id > 500;});
با این حال، با شروع در لاراول 6، متد سازنده پرس و جو
cursor
برای برگرداندن یک نمونه به روز شده است
LazyCollection
. این به شما این امکان را می دهد که همچنان فقط یک پرس و جو را در مقابل پایگاه داده اجرا کنید، اما تنها یک مدل Eloquent را در هر زمان در حافظه بارگذاری کنید. در این مثال،
filter
تماس برگشتی اجرا نمیشود تا زمانی که در واقع بر روی هر کاربر بهصورت جداگانه تکرار کنیم و امکان کاهش شدید مصرف حافظه را فراهم کنیم:
$users = App\User::cursor()->filter(function ($user) { return $user->id > 500;}); foreach ($users as $user) { echo $user->id;}
Eloquent Subquery Enhances
بهبودهای فرعی شیوا توسط جاناتان رینینک پیاده سازی شد .
لاراول 6 چندین پیشرفت و بهبود جدید را برای پشتیبانی از پایگاه داده های فرعی معرفی می کند. به عنوان مثال، بیایید تصور کنیم که یک جدول پرواز
destinations
و یک جدول از
flights
مقصد داریم. جدول
flights
شامل
arrived_at
ستونی است که نشان می دهد پرواز چه زمانی به مقصد رسیده است.
با استفاده از قابلیت انتخاب فرعی جدید در لاراول 6، میتوانیم همه پروازها
destinations
و نام پروازی را که اخیراً به آن مقصد رسیده است، با استفاده از یک جستار انتخاب کنیم:
return Destination::addSelect(['last_flight' => Flight::select('name') ->whereColumn('destination_id', 'destinations.id') ->orderBy('arrived_at', 'desc') ->limit(1)])->get();
علاوه بر این، میتوانیم از ویژگیهای جدید فرعی اضافه شده به عملکرد سازنده پرس و جو
orderBy
برای مرتبسازی همه مقصدها بر اساس آخرین پرواز به آن مقصد استفاده کنیم. باز هم، این ممکن است در حین اجرای یک کوئری در مقابل پایگاه داده انجام شود:
return Destination::orderByDesc( Flight::select('arrived_at') ->whereColumn('destination_id', 'destinations.id') ->orderBy('arrived_at', 'desc') ->limit(1))->get();
رابط کاربری لاراول
داربست جلویی که معمولاً با نسخههای قبلی لاراول ارائه میشد، در یک
laravel/ui
بسته Composer استخراج شده است. این اجازه می دهد تا داربست UI شخص اول به طور جداگانه از چارچوب اصلی توسعه و نسخه بندی شود. در نتیجه این تغییر، هیچ کد بوت استرپ یا Vue در داربست چارچوب پیش فرض وجود ندارد و
make:auth
دستور نیز از فریمورک استخراج شده است.
به منظور بازیابی داربست سنتی Vue / Bootstrap موجود در نسخه های قبلی لاراول، می توانید
laravel/ui
بسته را نصب کنید و از
ui
دستور Artisan برای نصب داربست frontend استفاده کنید:
composer require laravel/ui "^1.0" --dev php artisan ui vue --auth