یادداشت های انتشار
طرح نسخه سازی
لاراول و سایر بستههای شخص اول آن از Semantic Versioning پیروی میکنند . نسخههای اصلی فریمورک هر شش ماه یکبار (~ فوریه و ~ آگوست) منتشر میشوند، در حالی که نسخههای فریمورک و پچ ممکن است هر هفته منتشر شوند. نسخه های جزئی و پچ هرگز نباید حاوی تغییرات شکسته باشند.
هنگام ارجاع به چارچوب لاراول یا اجزای آن از برنامه یا بسته خود، همیشه
باید از یک محدودیت نسخه مانند استفاده کنید
^7.0
، زیرا نسخه های اصلی لاراول شامل تغییرات شکسته می شوند.
با این حال، ما تلاش میکنیم همیشه اطمینان حاصل کنیم که میتوانید یک نسخه
اصلی جدید را در یک روز یا کمتر بهروزرسانی کنید.
خط مشی پشتیبانی
برای نسخه های LTS، مانند لاراول 6، رفع اشکال به مدت 2 سال و رفع امنیتی برای 3 سال ارائه می شود. این نسخه ها طولانی ترین پنجره پشتیبانی و نگهداری را فراهم می کنند. برای نسخههای عمومی، رفع اشکال به مدت ۶ ماه و رفعهای امنیتی برای ۱ سال ارائه میشود. برای همه کتابخانههای اضافی، از جمله Lumen، فقط آخرین نسخه رفع اشکال میشود. علاوه بر این، لطفاً نسخه های پایگاه داده پشتیبانی شده توسط لاراول را بررسی کنید .
نسخه | رهایی | رفع اشکال تا زمانی که | رفع امنیتی تا |
---|---|---|---|
6 (LTS) | 3 سپتامبر 2019 | 3 سپتامبر 2021 | 3 سپتامبر 2022 |
7 | 3 مارس 2020 | 10 سپتامبر 2020 | 3 مارس 2021 |
8 | 8 سپتامبر 2020 | 8 مارس 2021 | 8 سپتامبر 2021 |
لاراول 7
لاراول 7 با معرفی Laravel Sanctum، بهبود سرعت مسیریابی، قالبهای سفارشی
Eloquent، تگهای اجزای Blade، عملیات رشته روان، مشتری HTTP متمرکز بر توسعهدهنده، پشتیبانی از CORS شخص اول،
محدوده بهبود یافته برای اتصال مدل مسیر، به بهبودهای ایجاد شده در Laravel 6.x ادامه میدهد. ، سفارشیسازی
خرد، بهبود صفهای پایگاه داده، درایورهای ایمیل متعدد، ارسالهای زمان پرس و جو، یک
artisan test
دستور جدید، و انواع دیگر رفع اشکال و بهبود قابلیت استفاده.
لاراول پناهگاه
Laravel Sanctum توسط Taylor Otwell ساخته شد .
Laravel Sanctum یک سیستم احراز هویت پر وزن برای SPA ها (برنامه های تک صفحه ای)، برنامه های کاربردی تلفن همراه و API های ساده و مبتنی بر توکن ارائه می کند. Sanctum به هر کاربر برنامه شما اجازه می دهد تا چندین توکن API برای حساب خود ایجاد کند. ممکن است به این نشانهها تواناییها/حوزههایی داده شود که مشخص میکند توکنها مجاز به انجام چه اقداماتی هستند.
برای اطلاعات بیشتر در مورد Laravel Sanctum، به مستندات Sanctum مراجعه کنید .
بازیگران الکوئنت سفارشی
بازیگران سفارشی Eloquent توسط Taylor Otwell ارائه شده است .
لاراول انواع مختلفی از بازیگران داخلی و مفید دارد.
با این حال، ممکن است گاهی لازم باشد انواع بازیگران خود را تعریف کنید.
اکنون می توانید این کار را با تعریف کلاسی که
CastsAttributes
رابط را پیاده سازی می کند، انجام دهید.
کلاس هایی که این رابط را پیاده سازی می کنند باید a
get
و
set
متدها را تعریف کنند.
این
get
روش مسئول تبدیل یک مقدار خام از پایگاه داده به یک مقدار ریختهگری است، در
حالی که
set
روش باید یک مقدار ریختهشده را به یک مقدار خام تبدیل کند که میتواند در
پایگاه داده ذخیره شود.
به عنوان مثال، نوع ریخته گری داخلی را
json
به عنوان یک نوع ریخته گری سفارشی دوباره پیاده سازی می کنیم:
<?php namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; class Json implements CastsAttributes{ /** * Cast the given value. * * @param \Illuminate\Database\Eloquent\Model $model * @param string $key * @param mixed $value * @param array $attributes * @return array */ public function get($model, $key, $value, $attributes) { return json_decode($value, true); } /** * Prepare the given value for storage. * * @param \Illuminate\Database\Eloquent\Model $model * @param string $key * @param array $value * @param array $attributes * @return string */ public function set($model, $key, $value, $attributes) { return json_encode($value); }}
هنگامی که یک نوع Cast سفارشی را تعریف کردید، می توانید آن را با استفاده از نام کلاس آن به یک ویژگی مدل متصل کنید:
<?php namespace App; use App\Casts\Json;use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'options' => Json::class, ];}
برای یادگیری نحوه نوشتن قالبهای Eloquent سفارشی، از جمله قالبهای سفارشی که برای ارزشگذاری اشیا پخش میشوند، لطفاً به مستندات Eloquent مراجعه کنید .
برچسب ها و بهبود اجزای تیغه
برچسبهای اجزای Blade توسط Spatie ، Marcel Pociot ، Caleb Porzio ، Dries Vints و Taylor Otwell ارائه شدهاند .
اجزای Blade برای اجازه دادن به رندر مبتنی بر برچسب، مدیریت ویژگی، کلاسهای مؤلفه، مؤلفههای نمای درون خطی و موارد دیگر بازنگری شدهاند. از آنجایی که تعمیرات اساسی اجزای Blade بسیار گسترده است، لطفاً برای اطلاع از این ویژگی ، به مستندات کامل اجزای Blade مراجعه کنید.
به طور خلاصه، یک جزء ممکن است اکنون یک کلاس مرتبط داشته باشد که داده هایی
را که می پذیرد مشخص می کند.
تمام خصوصیات عمومی و متدهای تعریف شده در کلاس کامپوننت به طور خودکار در
دسترس نمای کامپوننت قرار می گیرند.
هر ویژگی HTML اضافی مشخص شده در مؤلفه ممکن است با استفاده از
$attributes
متغیر خودکار گنجانده شده، که یک نمونه کیف ویژگی است، مدیریت شود.
در این مثال، فرض می کنیم که یک
App\View\Components\Alert
جزء به این صورت تعریف شده است:
<?php namespace App\View\Components; use Illuminate\View\Component; class Alert extends Component{ /** * The alert type. * * @var string */ public $type; /** * Create the component instance. * * @param string $type * @return void */ public function __construct($type) { $this->type = $type; } /** * Get the class for the given alert type. * * @return string */ public function classForType() { return $this->type == 'danger' ? 'alert-danger' : 'alert-warning'; } /** * Get the view / contents that represent the component. * * @return \Illuminate\View\View|string */ public function render() { return view('components.alert'); }}
و با فرض اینکه قالب Blade کامپوننت به این صورت تعریف شده است:
<!-- /resources/views/components/alert.blade.php --> <div class="alert {{ $classForType }}" {{ $attributes }}> {{ $heading }} {{ $slot }}</div>
کامپوننت ممکن است در نمای Blade دیگری با استفاده از تگ کامپوننت ارائه شود:
<x-alert type="error" class="mb-4"> <x-slot name="heading"> Alert content... </x-slot> Default slot content...</x-alert>
همانطور که گفته شد، این فقط یک نمونه بسیار کوچک از عملکرد تعمیر اساسی اجزای Blade در لاراول 7 است و اجزای ناشناس، اجزای نمای درون خطی و انواع ویژگی های دیگر را نشان نمی دهد. لطفاً برای اطلاع از این ویژگی به مستندات کامل اجزای Blade مراجعه کنید.
نحو قبلی
@component
برای اجزای Blade حذف نشده و نخواهد شد.
سرویس گیرنده HTTP
کلاینت HTTP بسته بندی Guzzle است و توسط آدام واتان ، جیسون مک کری و تیلور اوتول ارائه شده است .
لاراول اکنون یک API گویا و حداقلی را در اطراف
کلاینت Guzzle HTTP
ارائه میکند که به شما امکان میدهد به سرعت درخواستهای HTTP خروجی را
برای برقراری ارتباط با سایر برنامههای کاربردی وب ارسال کنید.
بسته بندی لاراول در اطراف Guzzle بر رایج ترین موارد استفاده آن و یک تجربه
توسعه دهنده فوق العاده متمرکز شده است.
به عنوان مثال، کلاینت
POST
با دادههای JSON ارتباط برقرار میکند:
use Illuminate\Support\Facades\Http; $response = Http::withHeaders([ 'X-First' => 'foo', 'X-Second' => 'bar'])->post('http://test.com/users', [ 'name' => 'Taylor',]); return $response['id'];
علاوه بر این، سرویس گیرنده HTTP عملکرد آزمایشی فوق العاده و ارگونومیک را ارائه می دهد:
Http::fake([ // Stub a JSON response for GitHub endpoints... 'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']), // Stub a string response for Google endpoints... 'google.com/*' => Http::response('Hello World', 200, ['Headers']), // Stub a series of responses for Facebook endpoints... 'facebook.com/*' => Http::sequence() ->push('Hello World', 200) ->push(['foo' => 'bar'], 200) ->pushStatus(404),]);
برای کسب اطلاعات بیشتر در مورد همه ویژگی های سرویس گیرنده HTTP، لطفاً به مستندات سرویس گیرنده HTTP مراجعه کنید .
عملیات رشته روان
عملیات رشته روان توسط تیلور اوتول انجام شد .
احتمالاً با کلاس موجود لاراول آشنا هستید
Illuminate\Support\Str
که انواع توابع دستکاری رشته های مفید را ارائه می دهد.
لاراول 7 اکنون یک کتابخانه شی گرا و روان تر دستکاری رشته ارائه می دهد که
در بالای این توابع ساخته شده است.
می توانید
Illuminate\Support\Stringable
با استفاده از این روش یک شی روان ایجاد کنید
Str::of
.
سپس میتوان روشهای مختلفی را برای دستکاری رشته به شیء متصل کرد:
return (string) Str::of(' Laravel Framework 6.x ') ->trim() ->replace('6.x', '7.x') ->slug();
برای اطلاعات بیشتر در مورد روش های موجود از طریق دستکاری رشته روان، لطفاً به مستندات کامل آن مراجعه کنید .
بهبود اتصال مدل مسیر
بهبود اتصال مدل مسیر توسط تیلور اوتول ارائه شد .
سفارشی سازی کلید
گاهی اوقات ممکن است بخواهید مدل های Eloquent را با استفاده از ستونی غیر
از
id
.
برای انجام این کار، لاراول 7 به شما اجازه می دهد تا ستون را در تعریف
پارامتر مسیر مشخص کنید:
Route::get('api/posts/{post:slug}', function (App\Post $post) { return $post;});
محدوده خودکار
گاهی اوقات، هنگامی که به طور ضمنی چندین مدل Eloquent را در یک تعریف یک مسیر متصل میکنید، ممکن است بخواهید دامنه مدل Eloquent دوم را به گونهای تنظیم کنید که باید فرزند اولین مدل Eloquent باشد. به عنوان مثال، این وضعیت را در نظر بگیرید که یک پست وبلاگ را توسط یک کاربر خاص بازیابی می کند:
use App\Post;use App\User; Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) { return $post;});
هنگام استفاده از یک اتصال ضمنی با کلید سفارشی به عنوان پارامتر مسیر
تودرتو، لاراول 7 به طور خودکار محدوده پرس و جو را برای بازیابی مدل تودرتو توسط والد خود با استفاده از
قراردادها برای حدس زدن نام رابطه روی والد، بررسی می کند.
در این حالت، فرض می شود که
User
مدل دارای رابطه ای به نام
posts
(جمع نام پارامتر مسیر) است که می تواند برای بازیابی
Post
مدل استفاده شود.
برای اطلاعات بیشتر در مورد اتصال مدل مسیر، لطفاً به مستندات مسیریابی مراجعه کنید .
چند درایور ایمیل
پشتیبانی چندگانه درایور ایمیل توسط تیلور اتول ارائه شد .
لاراول 7 امکان پیکربندی چندین "mailer" را برای یک برنامه واحد فراهم می
کند.
هر ایمیلی که در
mail
فایل پیکربندی پیکربندی شده است ممکن است گزینه های خاص خود و حتی "حمل و
نقل" منحصر به فرد خود را داشته باشد که به برنامه شما امکان می دهد از سرویس های ایمیل مختلف برای ارسال پیام
های ایمیل خاص استفاده کند.
به عنوان مثال، برنامه شما ممکن است از Postmark برای ارسال نامه تراکنشی
استفاده کند در حالی که از Amazon SES برای ارسال نامه انبوه استفاده می کند.
به طور پیش فرض، لاراول از ایمیلی که به عنوان ایمیل پیکربندی شده در
فایل پیکربندی
default
شما استفاده می کند.
mail
با این حال، می توانید از این
mailer
روش برای ارسال پیام با استفاده از یک پیکربندی ایمیل خاص استفاده کنید:
Mail::mailer('postmark') ->to($request->user()) ->send(new OrderShipped($order));
بهبود سرعت حافظه پنهان مسیر
بهبود سرعت حافظه پنهان مسیر توسط مشارکت کنندگان بالادست Symfony و Dries Vints انجام شد .
لاراول 7 شامل یک روش جدید برای تطبیق مسیرهای کامپایل شده و کش شده است که
با استفاده از
route:cache
دستور Artisan کش شده اند.
در برنامههای بزرگ (مثلاً برنامههایی با 800 مسیر یا بیشتر)، این
پیشرفتها میتوانند منجر به
بهبود 2 برابری سرعت
درخواستها در ثانیه در معیار ساده «Hello World» شوند.
هیچ تغییری در برنامه شما لازم نیست.
پشتیبانی CORS
پشتیبانی CORS توسط Barry vd. هوول .
لاراول 7 شامل پشتیبانی شخص اول برای پیکربندی پاسخهای درخواست
اشتراکگذاری منابع متقاطع (CORS)
OPTIONS
با یکپارچهسازی بسته محبوب لاراول CORS است که توسط Barry vd نوشته شده
است.
هوول.
یک پیکربندی جدید در
اسکلت برنامه پیش فرض لاراول
cors
گنجانده شده است
.
برای اطلاعات بیشتر در مورد پشتیبانی CORS در Laravel 7.x، لطفاً به مستندات CORS مراجعه کنید .
Query Time Casts
ریخته گری زمان پرس و جو توسط مت بارلو انجام شد .
گاهی اوقات ممکن است لازم باشد هنگام اجرای یک پرس و جو، از جمله زمانی که یک مقدار خام را از جدول انتخاب می کنید، Casts را اعمال کنید. به عنوان مثال، پرس و جو زیر را در نظر بگیرید:
use App\Post;use App\User; $users = User::select([ 'users.*', 'last_posted_at' => Post::selectRaw('MAX(created_at)') ->whereColumn('user_id', 'users.id')])->get();
ویژگی
last_posted_at
نتایج این پرس و جو یک رشته خام خواهد بود.
اگر بتوانیم
date
هنگام اجرای پرس و جو، یک cast برای این ویژگی اعمال کنیم، راحت خواهد بود.
withCasts
برای انجام این کار، ممکن است از روش ارائه شده توسط لاراول 7
استفاده کنیم :
$users = User::select([ 'users.*', 'last_posted_at' => Post::selectRaw('MAX(created_at)') ->whereColumn('user_id', 'users.id')])->withCasts([ 'last_posted_at' => 'date'])->get();
بهبود صف پایگاه داده MySQL 8+
بهبود صف پایگاه داده MySQL توسط محمد سعید انجام شد .
در نسخه های قبلی لاراول،
database
به دلیل بن بست ها، صف برای استفاده در تولید به اندازه کافی قوی در نظر
گرفته نمی شد.
با این حال، لاراول 7 برای برنامههایی که از MySQL 8+ به عنوان صف پشتیبان
پایگاه داده استفاده میکنند، بهبودهایی ارائه میدهد.
با استفاده از
FOR UPDATE SKIP LOCKED
بند و سایر پیشرفتهای SQL،
database
اکنون میتوان از درایور در برنامههای تولید با حجم بالاتر استفاده کرد.
test
فرماندهی
صنعتگران
این فرمان توسط
نونو مادورو
test
ارائه شد
.
علاوه بر
phpunit
دستور، اکنون می توانید از
test
دستور Artisan برای اجرای تست های خود استفاده کنید.
Artisan test runner UX کنسول زیبا و اطلاعات بیشتری در مورد آزمایشی که در
حال حاضر در حال اجرا است ارائه می دهد.
علاوه بر این، دونده به طور خودکار در اولین شکست تست متوقف می شود:
php artisan test
هر آرگومان قابل انتقال به
phpunit
دستور ممکن است به دستور Artisan نیز منتقل شود
test
:
php artisan test --group=feature
بهبود الگوی ایمیل Markdown
بهبود الگوی ایمیل Markdown توسط تیلور اوتول انجام شد .
الگوی ایمیل پیشفرض Markdown طراحی جدید و مدرنتری بر اساس پالت رنگی Tailwind CSS دریافت کرده است. البته این قالب را می توان با توجه به نیاز اپلیکیشن شما منتشر و سفارشی کرد:
برای اطلاعات بیشتر در مورد ایمیل Markdown، لطفاً به اسناد ایمیل مراجعه کنید .
سفارشی سازی خرد
سفارشی سازی خرد توسط Taylor Otwell ارائه شده است .
دستورات کنسول Artisan
make
برای ایجاد کلاسهای مختلف مانند کنترلرها، جابها، مهاجرتها و تستها
استفاده میشود.
این کلاس ها با استفاده از فایل های "خرد" که با مقادیر بر اساس ورودی شما
پر شده اند، تولید می شوند.
با این حال، ممکن است گاهی بخواهید تغییرات کوچکی در فایل های تولید شده
توسط Artisan ایجاد کنید.
برای انجام این کار، لاراول 7
stub:publish
دستور انتشار رایجترین خردهها را برای سفارشیسازی ارائه میکند:
php artisan stub:publish
stubs
مقالات خرد منتشر شده در یک فهرست در ریشه برنامه شما
قرار خواهند گرفت .
make
هر تغییری که در این خردهها ایجاد کنید، زمانی که کلاسهای مربوطه آنها را
با استفاده از دستورات
Artisan ایجاد کنید، منعکس میشوند .
پیکربندی
maxExceptions
صف
این
maxExceptions
ملک توسط
محمد سعید
کمک شده است .
گاهی اوقات ممکن است بخواهید مشخص کنید که یک کار ممکن است بارها انجام شود،
اما اگر تلاش های مجدد توسط تعداد معینی از استثناها آغاز شود، باید شکست بخورد.
در لاراول 7، می توانید یک
maxExceptions
ویژگی را در کلاس شغلی خود تعریف کنید:
<?php namespace App\Jobs; class ProcessPodcast implements ShouldQueue{ /** * The number of times the job may be attempted. * * @var int */ public $tries = 25; /** * The maximum number of exceptions to allow before failing. * * @var int */ public $maxExceptions = 3; /** * Execute the job. * * @return void */ public function handle() { Redis::throttle('key')->allow(10)->every(60)->then(function () { // Lock obtained, process the podcast... }, function () { // Unable to obtain lock... return $this->release(10); }); }}
در این مثال، اگر برنامه نتواند قفل Redis را به دست آورد، کار به مدت ده ثانیه آزاد می شود و تا 25 بار تکرار می شود. با این حال، اگر سه استثناء کنترل نشده توسط کار ایجاد شود، کار شکست خواهد خورد.