راهنمای ارتقا
تغییرات با تاثیر زیاد
تغییرات تاثیر متوسط
ارتقا به 7.0 از 6.x
زمان تخمینی ارتقا: 15 دقیقه
ما سعی می کنیم هر تغییر احتمالی را مستند کنیم. از آنجایی که برخی از این تغییرات شکسته در بخشهای مبهم فریمورک هستند، تنها بخشی از این تغییرات ممکن است بر برنامه شما تأثیر بگذارد.
Symfony 5 مورد نیاز است
احتمال تاثیر: زیاد
لاراول 7 اجزای اصلی Symfony خود را به سری 5.x ارتقا داد، که اکنون نسخه جدید حداقل سازگار است.
PHP 7.2.5 مورد نیاز است
احتمال تاثیر: کم
حداقل نسخه جدید PHP اکنون 7.2.5 است.
به روز رسانی وابستگی ها
وابستگی های زیر را در
composer.json
فایل خود به روز کنید:
-
laravel/framework
به^7.0
-
nunomaduro/collision
به^4.1
-
phpunit/phpunit
به^8.5
-
laravel/tinker
به^2.0
-
facade/ignition
به^2.0
بستههای شخص اول زیر دارای نسخههای اصلی جدید برای پشتیبانی از لاراول 7 هستند. در صورت وجود، قبل از ارتقا، راهنمای ارتقاء فردی آنها را مطالعه کنید:
- تست کیت مرورگر نسخه 6.0
- Envoy نسخه 2.0
- Horizon نسخه 4.0
- نوا نسخه 3.0
- پاسپورت نسخه 9.0
- Scout v8.0
- تلسکوپ نسخه 3.0
- Tinker نسخه 2.0
- UI نسخه 2.0 (بدون نیاز به تغییر)
در نهایت، سایر بسته های شخص ثالث مصرف شده توسط برنامه شما را بررسی کنید و بررسی کنید که از نسخه مناسب برای پشتیبانی از لاراول 7 استفاده می کنید.
ارتقاهای مرتبط با Symfony 5
احتمال تاثیر: زیاد
لاراول 7 از سری 5.x اجزای سیمفونی استفاده می کند. برخی تغییرات جزئی در برنامه شما برای سازگاری با این ارتقا لازم است.
ابتدا
report
،
render
,
shouldReport
, و
renderForConsole
متدهای کلاس برنامه شما باید نمونه هایی از
اینترفیس را به جای نمونه ها
App\Exceptions\Handler
بپذیرد
:
Throwable
Exception
use Throwable; public function report(Throwable $exception);public function shouldReport(Throwable $exception);public function render($request, Throwable $exception);public function renderForConsole($output, Throwable $exception);
بعلاوه، هر روشی که بر روی کارهای صف اجرا می شود، باید
به جای نمونه، نمونه
failed
هایی را بپذیرد
.
Throwable
Exception
در مرحله بعد، لطفاً گزینه
session
فایل پیکربندی خود را بهروزرسانی کنید
secure
تا مقدار بازگشتی داشته باشد
null
:
'secure' => env('SESSION_SECURE_COOKIE', null),
کنسول Symfony، که جزء اساسی است که Artisan را قدرت میدهد، انتظار دارد که همه دستورات یک عدد صحیح را برگردانند. بنابراین، باید اطمینان حاصل کنید که هر یک از دستورات شما که مقداری را برمی گرداند، اعداد صحیح برمی گردند:
public function handle(){ // Before... return true; // After... return 0;}
احراز هویت
داربست
احتمال تاثیر: زیاد
تمام داربست های احراز هویت
به مخزن
منتقل
laravel/ui
شده است .
اگر از داربست احراز هویت لاراول استفاده می کنید، باید
^2.0
نسخه ی این بسته را نصب کنید و بسته در تمام محیط ها نصب شود.
require-dev
اگر قبلاً این بسته را در بخشی از فایل برنامه خود
قرار داده اید
composer.json
، باید آن را به
require
بخش انتقال دهید:
composer require laravel/ui "^2.0"
این
TokenRepositoryInterface
احتمال تاثیر: کم
روشی
recentlyCreatedToken
به رابط اضافه شده است
Illuminate\Auth\Passwords\TokenRepositoryInterface
.
اگر در حال نوشتن یک پیاده سازی سفارشی از این رابط هستید، باید این روش را
به پیاده سازی خود اضافه کنید.
تیغه
روش
component
_
احتمال تاثیر: متوسط
Blade::component
نام
این روش به
Blade::aliasComponent
.
لطفا تماس های خود را به این روش به روز کنید.
اجزای تیغه و "بلید ایکس"
احتمال تاثیر: متوسط
لاراول 7 شامل پشتیبانی شخص اول از Blade "تگ اجزا" است.
اگر میخواهید عملکرد اجزای برچسب داخلی Blade را غیرفعال کنید، میتوانید
متد را
withoutComponentTags
از
boot
متد خود فراخوانی کنید
AppServiceProvider
:
use Illuminate\Support\Facades\Blade; Blade::withoutComponentTags();
شیوا
addHidden
/
روش
addVisible
ها
احتمال تاثیر: کم
addHidden
روش های
غیرمستند
addVisible
حذف شده اند.
در عوض، لطفا از روش
makeHidden
و استفاده کنید
makeVisible
.
booting
/
روش
booted
ها
احتمال تاثیر: کم
و
متدها به Eloquent اضافه شده اند تا مکانی را برای تعریف راحت هر منطقی که
باید در طول فرآیند "بوت کردن" مدل اجرا شود، فراهم کند
booting
.
booted
اگر قبلاً متدهای مدلی با این نامها دارید، باید نام متدهای خود را تغییر
دهید تا با متدهای جدید اضافه شده مغایرت نداشته باشند.
سریال سازی تاریخ
احتمال تاثیر: زیاد
toArray
لاراول 7 هنگام استفاده از متد یا در مدلهای Eloquent
از قالب سریالسازی تاریخ جدید استفاده میکند
toJson
.
برای قالببندی تاریخها برای سریالسازی، چارچوب اکنون از
toJSON
روش کربن استفاده میکند که تاریخ سازگار با ISO-8601 شامل اطلاعات منطقه
زمانی و ثانیههای کسری را تولید میکند.
علاوه بر این، این تغییر پشتیبانی و ادغام بهتر با کتابخانه های تجزیه تاریخ
سمت سرویس گیرنده را فراهم می کند.
قبلاً، تاریخها به شکلی مانند زیر مرتب میشدند:
2019-12-02 20:01:00
.
تاریخ های سریال سازی شده با استفاده از قالب جدید مانند:
2019-12-02T20:01:00.283041Z
.
لطفاً توجه داشته باشید که تاریخ های ISO-8601 همیشه با UTC بیان می شوند.
اگر می خواهید به استفاده از رفتار قبلی ادامه دهید، می توانید
serializeDate
روش را در مدل خود لغو کنید:
use DateTimeInterface; /** * Prepare a date for array / JSON serialization. * * @param \DateTimeInterface $date * @return string */protected function serializeDate(DateTimeInterface $date){ return $date->format('Y-m-d H:i:s');}
این تغییر تنها بر سریالسازی مدلها و مجموعههای مدل به آرایهها و JSON تأثیر میگذارد. این تغییر تاثیری بر نحوه ذخیره تاریخ ها در پایگاه داده شما ندارد.
انواع کارخانه
احتمال تاثیر: متوسط
لاراول 7 ویژگی "انواع کارخانه" را حذف می کند. این ویژگی از اکتبر 2016 بدون سند است. اگر همچنان از این ویژگی استفاده میکنید، باید به حالت کارخانه ارتقا دهید که انعطافپذیری بیشتری را فراهم میکند.
روش
getOriginal
_
احتمال تاثیر: کم
این
$model->getOriginal()
روش اکنون به هر قالب و جهشدهندهای که در مدل تعریف شده است احترام
میگذارد.
قبلاً، این روش ویژگیهای خام و uncast را برمیگرداند.
اگر می خواهید به بازیابی مقادیر خام و ریخته نشده ادامه دهید، می توانید
getRawOriginal
به جای آن از روش استفاده کنید.
اتصال مسیر
احتمال تاثیر: کم
روش
resolveRouteBinding
رابط
Illuminate\Contracts\Routing\UrlRoutable
اکنون یک
$field
آرگومان را می پذیرد.
اگر این رابط را به صورت دستی پیاده سازی می کردید، باید پیاده سازی خود را
به روز کنید.
علاوه بر این،
resolveRouteBinding
متد کلاس
Illuminate\Database\Eloquent\Model
نیز اکنون یک
$field
پارامتر را می پذیرد.
اگر این روش را نادیده می گرفتید، باید روش خود را برای پذیرش این استدلال
به روز کنید.
در نهایت،
resolveRouteBinding
روش صفت
Illuminate\Http\Resources\DelegatesToResources
نیز اکنون یک
$field
پارامتر را می پذیرد.
اگر این روش را نادیده می گرفتید، باید روش خود را برای پذیرش این استدلال
به روز کنید.
HTTP
سازگاری با PSR-7
احتمال تاثیر: کم
کتابخانه Zend Diactoros برای تولید پاسخ های PSR-7 منسوخ شده است.
اگر از این بسته برای سازگاری با PSR-7 استفاده می کنید، لطفاً
nyholm/psr7
بسته Composer را به جای آن نصب کنید.
علاوه بر این، لطفا
^2.0
نسخه انتشار
symfony/psr-http-message-bridge
بسته Composer را نصب کنید.
ایمیل
تغییرات فایل پیکربندی
احتمال تاثیر: اختیاری
به منظور پشتیبانی از چندین ایمیل،
mail
فایل پیکربندی پیش فرض در Laravel 7.x تغییر کرده است تا آرایه ای از
mailers
.
با این حال، به منظور حفظ سازگاری با عقب، قالب لاراول 6.x این فایل
پیکربندی همچنان پشتیبانی می شود.
بنابراین،
هنگام ارتقاء به Laravel 7.x هیچ تغییری
لازم نیست.
با این حال، ممکن است بخواهید ساختار
فایل پیکربندی
جدید را بررسی کنید
mail
و فایل خود را به روز کنید تا تغییرات را منعکس کند.
علاوه بر این،
MAIL_DRIVER
متغیر محیطی به تغییر نام یافته است
MAIL_MAILER
.
به روز رسانی الگوی ایمیل Markdown
احتمال تاثیر: متوسط
قالب های ایمیل پیش فرض Markdown با طراحی حرفه ای تر و جذاب تر به روز شده
اند.
علاوه بر این،
promotion
جزء ایمیل Markdown غیرمستند حذف شده است.
از آنجایی که تورفتگی در Markdown معنای خاصی دارد، الگوهای ایمیل Markdown انتظار HTML بدون فرورفتگی دارند. اگر قبلاً قالبهای ایمیل پیشفرض لاراول را منتشر کردهاید، باید قالبهای ایمیل خود را مجدداً منتشر کنید یا به صورت دستی آنها را جدا کنید:
php artisan vendor:publish --tag=laravel-mail --force
اتصالات میلر سویفت
احتمال تاثیر: کم
swift.mailer
Laravel 7.x اتصالات و کانتینری
را ارائه نمی دهد
swift.transport
.
اکنون می توانید از طریق
mailer
اتصال به این اشیاء دسترسی داشته باشید:
$swiftMailer = app('mailer')->getSwiftMailer(); $swiftTransport = $swiftMailer->getTransport();
منابع
کلاس
Illuminate\Http\Resources\Json\Resource
_
احتمال تاثیر: کم
کلاس منسوخ
Illuminate\Http\Resources\Json\Resource
حذف شده است.
منابع شما باید
Illuminate\Http\Resources\Json\JsonResource
کلاس را گسترش دهند.
مسیریابی
getRoutes
روش
روتر
احتمال تاثیر: کم
روش روتر
getRoutes
اکنون به
Illuminate\Routing\RouteCollectionInterface
جای
Illuminate\Routing\RouteCollection
.
نام مسیرهای منحصر به فرد
احتمال تاثیر: متوسط
حتی با وجود اینکه هرگز به طور رسمی مستند نشده است، نسخه های قبلی لاراول به شما این امکان را می دهد که دو مسیر متفاوت با یک نام تعریف کنید. در لاراول 7 دیگر این امکان وجود ندارد و همیشه باید نام های منحصر به فردی برای مسیرهای خود ارائه دهید. مسیرهایی با نامهای تکراری میتوانند رفتار غیرمنتظرهای در چندین ناحیه از چارچوب ایجاد کنند.
پشتیبانی CORS
احتمال تاثیر: متوسط
پشتیبانی Cross-Origin Resource Sharing (CORS) اکنون به طور پیش فرض
یکپارچه شده است.
اگر از کتابخانه های CORS شخص ثالث استفاده می کنید، اکنون به شما توصیه می
شود که از
فایل پیکربندی
جدید
cors
استفاده کنید .
در مرحله بعد، کتابخانه CORS زیرین را به عنوان وابستگی برنامه خود نصب کنید:
composer require fruitcake/laravel-cors
در نهایت، میان افزار را به
لیست میان افزار جهانی
\Fruitcake\Cors\HandleCors::class
خود اضافه کنید.
App\Http\Kernel
جلسه
درایور
array
جلسه
احتمال تاثیر: کم
داده
array
های درایور جلسه اکنون برای درخواست فعلی ثابت است.
قبلاً، داده های ذخیره شده در
array
جلسه حتی در طول درخواست فعلی قابل بازیابی نبودند.
آزمایش کردن
ادعا
assertSee
_
احتمال تاثیر: متوسط
,
,
,
assertSee
,
و
ادعاهای کلاس
اکنون به طور خودکار از مقادیر فرار می کنند
.
اگر به صورت دستی از مقادیر ارسال شده به این ادعاها فرار می کنید، دیگر
نباید این کار را انجام دهید.
اگر نیاز دارید مقادیر بدون فرار را مشخص کنید، می توانید
به عنوان آرگومان دوم به متد ارسال کنید.
assertDontSee
assertSeeText
assertDontSeeText
assertSeeInOrder
assertSeeTextInOrder
TestResponse
false
کلاس
TestResponse
_
احتمال تاثیر: کم
Illuminate\Foundation\Testing\TestResponse
نام کلاس
به
Illuminate\Testing\TestResponse
.
اگر در حال گسترش این کلاس هستید، مطمئن شوید که فضای نام را به روز کنید.
کلاس
Assert
_
احتمال تاثیر: کم
Illuminate\Foundation\Testing\Assert
نام کلاس
به
Illuminate\Testing\Assert
.
اگر از این کلاس استفاده میکنید، حتماً فضای نام را بهروزرسانی کنید.
اعتبار سنجی
قانون
different
_
احتمال تاثیر: متوسط
different
اکنون اگر یکی از پارامترهای مشخص شده در درخواست وجود نداشته باشد،
این قانون شکست خواهد خورد.
متفرقه
ما همچنین شما را تشویق می کنیم که تغییرات موجود در
laravel/laravel
مخزن GitHub
را مشاهده کنید .
در حالی که بسیاری از این تغییرات مورد نیاز نیستند، ممکن است بخواهید این
فایل ها را با برنامه خود هماهنگ نگه دارید.
برخی از این تغییرات در این راهنمای ارتقا پوشش داده خواهد شد، اما برخی
دیگر، مانند تغییرات در فایلهای پیکربندی یا نظرات، چنین نیستند.
می توانید به راحتی تغییرات را با
ابزار مقایسه GitHub
مشاهده کنید و انتخاب کنید کدام به روز رسانی برای شما مهم است.