نسخه:

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

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

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

ارتقا به 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 هستند. در صورت وجود، قبل از ارتقا، راهنمای ارتقاء فردی آنها را مطالعه کنید:

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

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

لاراول 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 مشاهده کنید و انتخاب کنید کدام به روز رسانی برای شما مهم است.