نسخه:

راهنمای ارتقا

تغییرات با تاثیر زیاد

تغییرات تاثیر متوسط

ارتقا به 6.0 از 5.8

زمان تخمینی ارتقا: یک ساعت

ما سعی می کنیم هر تغییر احتمالی را مستند کنیم. از آنجایی که برخی از این تغییرات شکسته در بخش‌های مبهم فریمورک هستند، تنها بخشی از این تغییرات ممکن است بر برنامه شما تأثیر بگذارد.

PHP 7.2 مورد نیاز است

احتمال تاثیر: متوسط

PHP 7.1 دیگر از دسامبر 2019 به طور فعال نگهداری نخواهد شد. بنابراین، Laravel 6.0 به PHP 7.2 یا بالاتر نیاز دارد.

به روز رسانی وابستگی ها

laravel/framework وابستگی خود را ^6.0 در فایل خود به روز کنید composer.json . در صورت نصب، laravel/passport وابستگی خود را ^9.3.2 در فایل خود به روز کنید composer.json .

در مرحله بعد، بسته های شخص ثالث مصرف شده توسط برنامه شما را بررسی کنید و بررسی کنید که از نسخه مناسب برای پشتیبانی لاراول 6 استفاده می کنید.

مجوز

منابع مجاز و viewAny

احتمال تاثیر: زیاد

خط‌مشی‌های مجوز پیوست شده به کنترل‌کننده‌هایی که از این authorizeResource متد استفاده می‌کنند، اکنون باید viewAny متدی را تعریف کنند که زمانی که کاربر به روش کنترل‌کننده دسترسی پیدا می‌کند، فراخوانی می‌شود index . در غیر این صورت تماس های index متد کنترلر به عنوان غیرمجاز رد خواهد شد.

پاسخ های مجوز

احتمال تاثیر: کم

امضای سازنده کلاس Illuminate\Auth\Access\Response تغییر کرده است. شما باید کد خود را بر این اساس به روز کنید. اگر پاسخ‌های مجوز را به صورت دستی ایجاد نمی‌کنید و فقط از روش‌ها allow و deny نمونه‌های موجود در خط‌مشی‌های خود استفاده می‌کنید، نیازی به تغییر نیست:

/**
* Create a new response.
*
* @param bool $allowed
* @param string $message
* @param mixed $code
* @return void
*/
public function __construct($allowed, $message = '', $code = null)

بازگرداندن پاسخ های "انکار".

احتمال تاثیر: کم

در نسخه‌های قبلی لاراول، شما نیازی به برگرداندن مقدار متد از روش‌های خط‌مشی خود نداشتید deny زیرا یک استثنا بلافاصله ایجاد شد. با این حال، مطابق با مستندات لاراول، اکنون باید مقدار متد را deny از سیاست های خود برگردانید:

public function update(User $user, Post $post)
{
if (! $user->role->isEditor()) {
return $this->deny("You must be an editor to edit this post.")
}
 
return $user->id === $post->user_id;
}

قرارداد Illuminate\Contracts\Auth\Access\Gate _

احتمال تاثیر: کم

قرارداد روش Illuminate\Contracts\Auth\Access\Gate جدیدی دریافت کرده است inspect . اگر این رابط را به صورت دستی پیاده سازی می کنید، باید این روش را به پیاده سازی خود اضافه کنید.

کربن

Carbon 1.x دیگر پشتیبانی نمی شود

احتمال تاثیر: متوسط

Carbon 1.x دیگر پشتیبانی نمی شود زیرا به پایان عمر تعمیر و نگهداری خود نزدیک می شود. لطفاً برنامه خود را به Carbon 2.0 ارتقا دهید.

پیکربندی

AWS_REGION متغیر محیطی

احتمال تاثیر: اختیاری

اگر قصد دارید از Laravel Vapor استفاده کنید ، باید تمام رخدادهای داخل دایرکتوری AWS_REGION خود را به روز رسانی کنید . علاوه بر این، شما باید نام این متغیر محیطی را در فایل خود به روز کنید. config AWS_DEFAULT_REGION .env

مشتری پیش فرض Redis

احتمال تاثیر: متوسط

کلاینت پیش‌فرض Redis از predis به تغییر کرده است phpredis . برای ادامه استفاده predis ، مطمئن شوید که گزینه پیکربندی در فایل پیکربندی شما redis.client تنظیم شده است . predis config/database.php

فروشگاه کش DynamoDB

احتمال تاثیر: اختیاری

اگر قصد دارید از Laravel Vapor استفاده کنید ، باید config/cache.php فایل خود را به‌روزرسانی کنید تا dynamodb فروشگاه را نیز شامل شود.

<?php
return [
...
'stores' => [
...
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
],
...
];

متغیرهای محیطی SQS

احتمال تاثیر: اختیاری

اگر قصد دارید از Laravel Vapor استفاده کنید ، باید config/queue.php فایل خود را به‌روزرسانی کنید تا sqs متغیرهای محیط اتصال به‌روزرسانی شده را در خود داشته باشد.

<?php
return [
...
'connections' => [
...
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'your-queue-name'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
],
...
];

پایگاه داده

table روش کپسول

احتمال تاثیر: متوسط

این تغییر فقط برای برنامه های غیر لاراول که illuminate/database به عنوان وابستگی استفاده می کنند اعمال می شود.

امضای متد Illuminate\Database\Capsule\Manager کلاس table به روز شده است تا نام مستعار جدول را به عنوان آرگومان دوم خود بپذیرد. اگر illuminate/database خارج از برنامه لاراول استفاده می کنید ، باید هر تماسی را به این روش به روز کنید:

/**
* Get a fluent query builder instance.
*
* @param \Closure|\Illuminate\Database\Query\Builder|string $table
* @param string|null $as
* @param string|null $connection
* @return \Illuminate\Database\Query\Builder
*/
public static function table($table, $as = null, $connection = null)

روش cursor _

احتمال تاثیر: کم

این cursor روش اکنون یک نمونه از را Illuminate\Support\LazyCollection به جای یک برمی‌گرداند Generator که LazyCollection ممکن است درست مانند یک ژنراتور تکرار شود:

$users = App\User::cursor();
 
foreach ($users as $user) {
//
}

شیوا

روش BelongsTo::update _

احتمال تاثیر: متوسط

برای ثبات، update روش رابطه BelongsTo اکنون به عنوان یک جستجوی به‌روزرسانی موقت عمل می‌کند، به این معنی که حفاظت از انتساب انبوه یا رویدادهای Eloquent آتش را ارائه نمی‌کند. این باعث می‌شود که رابطه با update روش‌های همه انواع دیگر روابط سازگار باشد.

اگر می‌خواهید یک مدل پیوست شده از طریق یک رابطه را به‌روزرسانی کنید BelongsTo و حفاظت و رویدادهای به‌روزرسانی تخصیص انبوه را دریافت کنید، باید update روش روی خود مدل را فراخوانی کنید:

// Ad-hoc query... no mass assignment protection or events...
$post->user()->update(['foo' => 'bar']);
 
// Model update... provides mass assignment protection and events...
$post->user->update(['foo' => 'bar']);

آرایه پذیر و toArray

احتمال تاثیر: متوسط

روش مدل Eloquent toArray اکنون هر ویژگی را که پیاده سازی می کند Illuminate\Contracts\Support\Arrayable به یک آرایه ارسال می کند.

اعلامیه نوع کلید اولیه

احتمال تاثیر: متوسط

لاراول 6.0 بهینه سازی عملکرد را برای انواع کلیدهای عدد صحیح دریافت کرده است. اگر از یک رشته به عنوان کلید اصلی مدل خود استفاده می کنید، باید نوع کلید را با استفاده از $keyType ویژگی روی مدل خود اعلام کنید:

/**
* The "type" of the primary key ID.
*
* @var string
*/
protected $keyType = 'string';

تایید ایمیل

ارسال مجدد روش تأیید مسیر HTTP

احتمال تاثیر: متوسط

برای جلوگیری از حملات احتمالی CSRF، email/resend مسیر ثبت شده توسط روتر هنگام استفاده از تأیید ایمیل داخلی لاراول از یک GET مسیر به یک POST مسیر به روز شده است. بنابراین، برای ارسال نوع درخواست مناسب به این مسیر، باید frontend خود را به روز کنید. به عنوان مثال، اگر از داربست قالب تأیید ایمیل داخلی استفاده می کنید:

{{ __('Before proceeding, please check your email for a verification link.') }}
{{ __('If you did not receive the email') }},
 
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
@csrf
 
<button type="submit" class="btn btn-link p-0 m-0 align-baseline">
{{ __('click here to request another') }}
</button>.
</form>

قرارداد MustVerifyEmail _

احتمال تاثیر: کم

روش جدیدی getEmailForVerification به قرارداد اضافه شده است Illuminate\Contracts\Auth\MustVerifyEmail . اگر به صورت دستی این قرارداد را اجرا می کنید، باید این روش را اجرا کنید. این روش باید آدرس ایمیل مرتبط شی را برگرداند. اگر App\User مدل شما از این ویژگی استفاده می‌کند Illuminate\Auth\MustVerifyEmail ، نیازی به تغییر نیست، زیرا این ویژگی این روش را برای شما پیاده‌سازی می‌کند.

تغییر مسیر تأیید ایمیل

احتمال تاثیر: متوسط

مسیر مسیر برای تأیید ایمیل ها از /email/verify/{id} به تغییر کرده است /email/verify/{id}/{hash} . هر ایمیل تایید ایمیلی که قبل از ارتقا به لاراول 6.x ارسال شده باشد دیگر معتبر نخواهد بود و صفحه 404 را نمایش می دهد. در صورت تمایل، می توانید مسیری مطابق با مسیر URL تأیید قدیمی تعریف کنید و یک پیام آموزنده برای کاربران خود نمایش دهید که از آنها می خواهد آدرس ایمیل خود را دوباره تأیید کنند.

یاوران

بسته کمکی رشته و آرایه

احتمال تاثیر: زیاد

همه str_ و array_ کمک‌کنندگان به بسته جدید Composer منتقل شده laravel/helpers و از چارچوب حذف شده‌اند. در صورت تمایل، می‌توانید تمام تماس‌های این کمک‌ها را برای استفاده از Illuminate\Support\Str و Illuminate\Support\Arr کلاس‌ها به‌روزرسانی کنید. همچنین، می‌توانید laravel/helpers بسته جدید را به برنامه خود اضافه کنید تا به استفاده از این کمک‌ها ادامه دهید:

composer require laravel/helpers

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

php artisan view:clear

بومی سازی

و روشها Lang::trans _ Lang::transChoice

احتمال تاثیر: متوسط

و Lang::trans متدهای Lang::transChoice مترجم به Lang::get و Lang::choice .

علاوه بر این، اگر به صورت دستی Illuminate\Contracts\Translation\Translator قرارداد را اجرا می کنید، باید پیاده سازی trans و transChoice روش های خود را به get و به روز کنید choice .

روش Lang::getFromJson _

احتمال تاثیر: متوسط

و روش Lang::get ها Lang::getFromJson ادغام شده اند. تماس های Lang::getFromJson روش باید برای فراخوانی به روز شوند Lang::get .

شما باید php artisan view:clear دستور Artisan را اجرا کنید تا از خطاهای Blade مربوط به حذف Lang::transChoice ، Lang::trans و و جلوگیری کنید Lang::getFromJson .

ایمیل

درایورهای Mandrill & SparkPost حذف شدند

احتمال تاثیر: کم

درایورهای پست mandrill و sparkpost ایمیل حذف شده اند. اگر می‌خواهید به استفاده از هر یک از این درایورها ادامه دهید، ما شما را تشویق می‌کنیم که بسته‌ای را که در انجمن نگهداری می‌شود انتخاب کنید که درایور را ارائه می‌دهد.

اطلاعیه

Nexmo Routing حذف شد

احتمال تاثیر: کم

بخشی از کانال اطلاع رسانی Nexmo از هسته چارچوب حذف شد. اگر به مسیریابی اعلان‌های Nexmo تکیه می‌کنید، باید routeNotificationForNexmo روش را به صورت دستی بر روی نهاد قابل اطلاع خود، همانطور که در مستندات توضیح داده شده است، پیاده‌سازی کنید .

تنظیم مجدد رمز عبور

اعتبارسنجی رمز عبور

احتمال تاثیر: کم

دیگر رمزهای PasswordBroker عبور را محدود یا تأیید نمی کند. صحت گذرواژه قبلاً توسط کلاس انجام می شد ResetPasswordController و اعتبارسنجی کارگزار را اضافی و سفارشی کردن آن غیرممکن می کرد. اگر به صورت دستی از PasswordBroker (یا Password نما) خارج از داخلی استفاده می کنید ResetPasswordController ، باید همه رمزهای عبور را قبل از ارسال آنها به کارگزار تأیید کنید.

صف ها

محدودیت تلاش مجدد در صف

احتمال تاثیر: متوسط

در نسخه های قبلی لاراول، این php artisan queue:work دستور کارها را به طور نامحدود دوباره امتحان می کرد. با شروع لاراول 6.0، این دستور اکنون یک کار را یک بار به صورت پیش فرض امتحان می کند. اگر می خواهید مشاغل را مجبور کنید به طور نامحدود امتحان شوند، می توانید 0 به --tries گزینه زیر بروید:

php artisan queue:work --tries=0

علاوه بر این، لطفاً اطمینان حاصل کنید که پایگاه داده برنامه شما حاوی یک failed_jobs جدول است. می توانید با استفاده از queue:failed-table دستور Artisan یک مهاجرت برای این جدول ایجاد کنید:

php artisan queue:failed-table

درخواست ها

نما Input _

احتمال تاثیر: متوسط

نما Input که در درجه اول تکراری از Request نما بود حذف شده است. اگر از روش استفاده می کنید Input::get ، اکنون باید Request::input متد را فراخوانی کنید. همه تماس های دیگر به Input نما ممکن است به سادگی برای استفاده از نما به روز شوند Request .

برنامه ریزی

روش between _

احتمال تاثیر: کم

در نسخه‌های قبلی لاراول، between روش زمان‌بند رفتار گیج‌کننده‌ای را در سراسر مرزهای تاریخ نشان داد. مثلا:

$schedule->command('list')->between('23:00', '4:00');

برای اکثر کاربران، رفتار مورد انتظار از این روش این است که list دستور را هر دقیقه برای تمام دقایق بین ساعت 23:00 تا 4:00 اجرا کنند. با این حال، در نسخه‌های قبلی لاراول، زمان‌بند list فرمان را هر دقیقه بین ساعت 4:00 تا 23:00 اجرا می‌کرد و اساساً آستانه‌های زمانی را عوض می‌کرد. در لاراول 6.0 این رفتار اصلاح شده است.

ذخیره سازی

درایور Rackspace Storage حذف شد

احتمال تاثیر: کم

درایور rackspace ذخیره سازی حذف شده است. اگر می‌خواهید به استفاده از Rackspace به‌عنوان یک ارائه‌دهنده فضای ذخیره‌سازی ادامه دهید، ما شما را تشویق می‌کنیم که بسته‌ای را که در انجمن نگهداری می‌شود انتخاب کنید که این درایور را ارائه می‌دهد.

تولید URL

مسیر تولید URL و پارامترهای اضافی

در نسخه‌های قبلی لاراول، انتقال پارامترهای آرایه انجمنی به route کمک کننده یا URL::route متد، گاهی اوقات از این پارامترها به عنوان مقادیر URI هنگام تولید URL برای مسیرها استفاده می‌کرد، حتی اگر مقدار پارامتر هیچ کلید منطبقی در مسیر مسیر نداشته باشد. با شروع لاراول 6.0، این مقادیر به‌جای آن به رشته کوئری متصل می‌شوند. برای مثال مسیر زیر را در نظر بگیرید:

Route::get('/profile/{location?}', function ($location = null) {
//
})->name('profile');
 
// Laravel 5.8: http://example.com/profile/active
echo route('profile', ['status' => 'active']);
 
// Laravel 6.0: http://example.com/profile?status=active
echo route('profile', ['status' => 'active']);

کمک action کننده و URL::action روش نیز تحت تأثیر این تغییر قرار می گیرند:

Route::get('/profile/{id?}', 'ProfileController@show');
 
// Laravel 5.8: http://example.com/profile/1
echo action('ProfileController@show', ['profile' => 1]);
 
// Laravel 6.0: http://example.com/profile?profile=1
echo action('ProfileController@show', ['profile' => 1]);

اعتبار سنجی

validationData روش FormRequest

احتمال تاثیر: کم

روش درخواست فرم از به validationData تغییر یافت . اگر این روش را در پیاده سازی خود نادیده می گیرید، باید قابلیت مشاهده را به . protected public public

متفرقه

ما همچنین شما را تشویق می کنیم که تغییرات موجود در laravel/laravel مخزن GitHub را مشاهده کنید . در حالی که بسیاری از این تغییرات مورد نیاز نیستند، ممکن است بخواهید این فایل ها را با برنامه خود هماهنگ نگه دارید. برخی از این تغییرات در این راهنمای ارتقا پوشش داده خواهد شد، اما برخی دیگر، مانند تغییرات در فایل‌های پیکربندی یا نظرات، چنین نیستند. می توانید به راحتی تغییرات را با ابزار مقایسه GitHub مشاهده کنید و انتخاب کنید کدام به روز رسانی برای شما مهم است.