راهنمای ارتقا
تغییرات با تاثیر زیاد
تغییرات تاثیر متوسط
- Carbon 1.x دیگر پشتیبانی نمی شود
- مشتری پیش فرض Redis
-
Capsule::table
روش پایگاه داده -
Floquent Arrayable &
toArray
-
BelongsTo::update
روش الکوئنت - انواع کلید اولیه الکوئنت
-
بومی سازی
Lang::trans
وLang::transChoice
روش ها -
Lang::getFromJson
روش بومی سازی - محدودیت تلاش مجدد در صف
- ارسال مجدد ایمیل مسیر تأیید
- تغییر مسیر تأیید ایمیل
-
نما
Input
_
ارتقا به 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
فروشگاه را نیز شامل شود.
<?phpreturn [ ... '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
متغیرهای محیط اتصال بهروزرسانی شده را در خود داشته باشد.
<?phpreturn [ ... '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/activeecho route('profile', ['status' => 'active']); // Laravel 6.0: http://example.com/profile?status=activeecho route('profile', ['status' => 'active']);
کمک
action
کننده و
URL::action
روش نیز تحت تأثیر این تغییر قرار می گیرند:
Route::get('/profile/{id?}', 'ProfileController@show'); // Laravel 5.8: http://example.com/profile/1echo action('ProfileController@show', ['profile' => 1]); // Laravel 6.0: http://example.com/profile?profile=1echo action('ProfileController@show', ['profile' => 1]);
اعتبار سنجی
validationData
روش
FormRequest
احتمال تاثیر: کم
روش درخواست فرم از
به
validationData
تغییر یافت
. اگر این روش را در پیاده سازی خود نادیده می گیرید، باید قابلیت مشاهده را به
.
protected
public
public
متفرقه
ما همچنین شما را تشویق می کنیم که تغییرات موجود در
laravel/laravel
مخزن GitHub
را مشاهده کنید . در حالی که بسیاری از این تغییرات مورد نیاز نیستند، ممکن است بخواهید این فایل ها را با برنامه خود هماهنگ نگه دارید. برخی از این تغییرات در این راهنمای ارتقا پوشش داده خواهد شد، اما برخی دیگر، مانند تغییرات در فایلهای پیکربندی یا نظرات، چنین نیستند. می توانید به راحتی تغییرات را با
ابزار مقایسه GitHub
مشاهده کنید و انتخاب کنید کدام به روز رسانی برای شما مهم است.