راهنمای ارتقا
تغییرات با تاثیر زیاد
تغییرات تاثیر متوسط
ارتقا به 8.0 از 7.x
زمان تخمینی ارتقا: 15 دقیقه
ما سعی می کنیم هر تغییر احتمالی را مستند کنیم. از آنجایی که برخی از این تغییرات شکسته در بخشهای مبهم فریمورک هستند، تنها بخشی از این تغییرات ممکن است بر برنامه شما تأثیر بگذارد.
PHP 7.3.0 مورد نیاز است
احتمال تاثیر: متوسط
حداقل نسخه جدید PHP اکنون 7.3.0 است.
به روز رسانی وابستگی ها
وابستگی های زیر را در
composer.json
فایل خود به روز کنید:
-
guzzlehttp/guzzle
به^7.0.1
-
facade/ignition
به^2.3.6
-
laravel/framework
به^8.0
-
laravel/ui
به^3.0
-
nunomaduro/collision
به^5.0
-
phpunit/phpunit
به^9.0
بستههای شخص اول زیر دارای نسخههای اصلی جدید برای پشتیبانی از لاراول 8 هستند. در صورت وجود، قبل از ارتقا، باید راهنمای ارتقاء فردی آنها را مطالعه کنید:
علاوه بر این، نصب کننده لاراول برای پشتیبانی
composer create-project
و لاراول جت استریم به روز شده است.
نصبکنندههای قدیمیتر از 4.0 پس از اکتبر 2020 دیگر کار نمیکنند. باید در
^4.0
اسرع وقت نصبکننده جهانی خود را ارتقا دهید.
در نهایت، سایر بسته های شخص ثالث مصرف شده توسط برنامه شما را بررسی کنید و بررسی کنید که از نسخه مناسب برای پشتیبانی از لاراول 8 استفاده می کنید.
مجموعه ها
روش
isset
_
احتمال تاثیر: کم
برای سازگاری با رفتار معمولی PHP،
offsetExists
روش
Illuminate\Support\Collection
به روز رسانی شده است تا به
isset
جای استفاده از
array_key_exists
.
این ممکن است در هنگام برخورد با موارد مجموعه ای که دارای ارزش زیر هستند،
تغییری در رفتار ایجاد کند
null
:
$collection = collect([null]); // Laravel 7.x - trueisset($collection[0]); // Laravel 8.x - falseisset($collection[0]);
پایگاه داده
فضاهای نام کاشت و کارخانه
احتمال تاثیر: زیاد
بذرپاشی ها و کارخانه ها اکنون دارای فضای نام هستند.
برای تطبیق با این تغییرات،
Database\Seeders
فضای نام را به کلاسهای seeder خود اضافه کنید.
علاوه بر این،
database/seeds
دایرکتوری قبلی باید به زیر تغییر نام دهد
database/seeders
:
<?php namespace Database\Seeders; use App\Models\User;use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder{ /** * Seed the application's database. * * @return void */ public function run() { ... }}
اگر می خواهید از
laravel/legacy-factories
بسته استفاده کنید، هیچ تغییری در کلاس های کارخانه شما لازم نیست.
با این حال، اگر کارخانه های خود را ارتقا می دهید، باید
Database\Factories
فضای نام را به آن کلاس ها اضافه کنید.
composer.json
در مرحله بعد، در فایل
خود ،
classmap
بلوک را از
autoload
بخش حذف کنید و نگاشت های دایرکتوری کلاس با فضای نام جدید را اضافه کنید:
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }},
شیوا
کارخانه های مدل
احتمال تاثیر: زیاد
ویژگی کارخانه مدل
لاراول
برای پشتیبانی از کلاس ها کاملاً بازنویسی شده است و با کارخانه های سبک
لاراول 7.x سازگار نیست.
با این حال، برای سهولت در روند ارتقا، یک
laravel/legacy-factories
بسته جدید برای ادامه استفاده از کارخانههای موجود خود با Laravel 8.x
ایجاد شده است.
می توانید این بسته را از طریق Composer نصب کنید:
composer require laravel/legacy-factories
واسط
Castable
_
احتمال تاثیر: کم
روش
castUsing
رابط
Castable
برای پذیرش آرایه ای از آرگومان ها به روز شده است.
اگر این رابط را پیاده سازی می کنید، باید پیاده سازی خود را بر این اساس به
روز کنید:
public static function castUsing(array $arguments);
رویدادهای افزایش/کاهش
احتمال تاثیر: کم
رویدادهای مدل مرتبط «بهروزرسانی» و «ذخیره» اکنون هنگام اجرای متدهای
increment
یا
decrement
در نمونههای مدل Eloquent ارسال میشوند.
مناسبت ها
کلاس
EventServiceProvider
_
احتمال تاثیر: کم
اگر
App\Providers\EventServiceProvider
کلاس شما حاوی یک
register
تابع است، باید مطمئن شوید که
parent::register
در ابتدای این متد فراخوانی می کنید.
در غیر این صورت رویدادهای اپلیکیشن شما ثبت نمی شود.
قرارداد
Dispatcher
_
احتمال تاثیر: کم
روش
listen
قرارداد
Illuminate\Contracts\Events\Dispatcher
برای اختیاری شدن ملک به روز شده است
$listener
.
این تغییر برای پشتیبانی از تشخیص خودکار انواع رویدادهای مدیریت شده از
طریق بازتاب ایجاد شده است.
اگر به صورت دستی این رابط را پیاده سازی می کنید، باید پیاده سازی خود را
بر این اساس به روز کنید:
public function listen($events, $listener = null);
چارچوب
به روز رسانی حالت تعمیر و نگهداری
احتمال تاثیر: اختیاری
ویژگی
حالت نگهداری
لاراول در لاراول 8.x بهبود یافته است.
پیش رندر کردن قالب حالت تعمیر و نگهداری اکنون پشتیبانی می شود و احتمال
مواجه شدن کاربران نهایی با خطا در حالت تعمیر و نگهداری را از بین می برد.
با این حال، برای پشتیبانی از این، خطوط زیر باید به
public/index.php
فایل شما اضافه شود.
این خطوط باید مستقیماً تحت تعریف ثابت موجود قرار گیرند
LARAVEL_START
:
define('LARAVEL_START', microtime(true)); if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) { require $maintenance;}
گزینه
php artisan down --message
_
احتمال تاثیر: متوسط
گزینه
--message
دستور
php artisan down
حذف شده است.
به عنوان یک جایگزین،
نماهای حالت تعمیر و نگهداری خود را از قبل
با پیام انتخابی خود رندر کنید.
گزینه
php artisan serve --no-reload
_
احتمال تاثیر: کم
یک
--no-reload
گزینه به دستور اضافه شده است
php artisan serve
.
این به سرور داخلی دستور می دهد که در صورت شناسایی تغییرات فایل محیط، سرور
را دوباره بارگیری نکند.
این گزینه در درجه اول هنگام اجرای تست های Laravel Dusk در محیط CI مفید
است.
$app
مالکیت
مدیر
احتمال تاثیر: کم
$app
ویژگی
قبلاً منسوخ شده
Illuminate\Support\Manager
کلاس حذف شده است.
اگر به این ویژگی متکی بودید، باید
$container
به جای آن از آن استفاده کنید.
یاور
elixir
_
احتمال تاثیر: کم
کمکی که قبلاً منسوخ شده بود
elixir
حذف شده است.
برنامه هایی که هنوز از این روش استفاده می کنند تشویق می شوند که به
Laravel Mix
ارتقاء دهند .
ایمیل
روش
sendNow
_
احتمال تاثیر: کم
روش منسوخ شده قبلی
sendNow
حذف شده است.
در عوض، لطفا از
send
روش استفاده کنید.
صفحه بندی
پیش فرض های صفحه بندی
احتمال تاثیر: زیاد
صفحهبندیکننده اکنون از
چارچوب Tailwind CSS
برای استایل پیشفرض خود استفاده میکند.
برای ادامه استفاده از بوت استرپ، باید متد فراخوانی زیر را به
boot
متد برنامه خود اضافه کنید
AppServiceProvider
:
use Illuminate\Pagination\Paginator; Paginator::useBootstrap();
صف
روش
retryAfter
_
احتمال تاثیر: زیاد
برای سازگاری با سایر ویژگیهای لاراول،
retryAfter
روش و
retryAfter
ویژگی مشاغل در صف، ایمیلها، اعلانها و شنوندگان به
backoff
.
شما باید نام این متد / ویژگی را در کلاس های مربوطه در برنامه خود به روز
کنید.
ویژگی
timeoutAt
_
احتمال تاثیر: زیاد
ویژگی
timeoutAt
مشاغل در صف، اعلانها و شنوندگان به نام تغییر یافته است
retryUntil
.
شما باید نام این ویژگی را در کلاس های مربوطه در برنامه خود به روز کنید.
allOnQueue()
/
روش
allOnConnection()
ها
احتمال تاثیر: زیاد
برای سازگاری با سایر روشهای اعزام،
allOnQueue()
و
allOnConnection()
روشهای مورد استفاده در زنجیره شغلی حذف شدهاند.
می توانید به جای آن از روش
onQueue()
و استفاده کنید
onConnection()
.
این متدها باید قبل از فراخوانی متد فراخوانی شوند
dispatch
:
ProcessPodcast::withChain([ new OptimizePodcast, new ReleasePodcast])->onConnection('redis')->onQueue('podcasts')->dispatch();
توجه داشته باشید که این تغییر فقط روی کد استفاده از
withChain
متد تأثیر می گذارد.
و هنوز در هنگام استفاده از راهنمای جهانی در
allOnQueue()
دسترس
allOnConnection()
هستند
dispatch()
.
پشتیبانی دسته ای جدول مشاغل ناموفق
احتمال تاثیر: اختیاری
اگر قصد دارید از ویژگی های
Job Batching
Laravel 8.x استفاده کنید،
failed_jobs
جدول پایگاه داده شما باید به روز شود.
ابتدا باید یک ستون جدید
uuid
به جدول شما اضافه شود:
use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema; Schema::table('failed_jobs', function (Blueprint $table) { $table->string('uuid')->after('id')->nullable()->unique();});
سپس،
failed.driver
گزینه پیکربندی در
queue
فایل پیکربندی شما باید به روز شود
database-uuids
.
علاوه بر این، ممکن است بخواهید برای کارهای ناموفق موجود خود UUID ایجاد کنید:
DB::table('failed_jobs')->whereNull('uuid')->cursor()->each(function ($job) { DB::table('failed_jobs') ->where('id', $job->id) ->update(['uuid' => (string) Illuminate\Support\Str::uuid()]);});
مسیریابی
پیشوند فضای نام کنترل کننده خودکار
احتمال تاثیر: اختیاری
در نسخههای قبلی لاراول،
RouteServiceProvider
کلاس حاوی
$namespace
ویژگی با مقدار
App\Http\Controllers
.
مقدار این ویژگی برای پیشوند خودکار اعلان های مسیر کنترلر و تولید URL مسیر
کنترلر مانند هنگام فراخوانی
action
کمک کننده استفاده شد.
در لاراول 8 این ویژگی
null
به صورت پیش فرض تنظیم شده است.
این اجازه میدهد تا اعلانهای مسیر کنترلر شما از سینتکس قابل فراخوانی
استاندارد PHP استفاده کنند، که پشتیبانی بهتری برای پرش به کلاس کنترلر در بسیاری از IDEها فراهم میکند:
use App\Http\Controllers\UserController; // Using PHP callable syntax...Route::get('/users', [UserController::class, 'index']); // Using string syntax...Route::get('/users', 'App\Http\Controllers\UserController@index');
در بیشتر موارد، این روی برنامههایی که در حال ارتقا هستند، تأثیری
نمیگذارد، زیرا شما
RouteServiceProvider
همچنان دارای
$namespace
ویژگی با مقدار قبلی است.
با این حال، اگر برنامه خود را با ایجاد یک پروژه کاملاً جدید لاراول ارتقا
دهید، ممکن است با این به عنوان یک تغییر اساسی مواجه شوید.
اگر میخواهید به استفاده از مسیریابی کنترلکننده با پیشوند خودکار اصلی
ادامه دهید، میتوانید به سادگی مقدار
$namespace
ویژگی را در داخل خود تنظیم کنید
RouteServiceProvider
و ثبتهای مسیر را در
boot
متد برای استفاده از
$namespace
ویژگی بهروزرسانی کنید:
class RouteServiceProvider extends ServiceProvider{ /** * The path to the "home" route for your application. * * This is used by Laravel authentication to redirect users after login. * * @var string */ public const HOME = '/home'; /** * If specified, this namespace is automatically applied to your controller routes. * * In addition, it is set as the URL generator's root namespace. * * @var string */ protected $namespace = 'App\Http\Controllers'; /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { $this->configureRateLimiting(); $this->routes(function () { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); }); } /** * Configure the rate limiters for the application. * * @return void */ protected function configureRateLimiting() { RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); }); }}
برنامه ریزی
کتابخانه
cron-expression
_
احتمال تاثیر: کم
وابستگی لاراول به
از
dragonmantank/cron-expression
به روز رسانی شده است
.
این نباید هیچ تغییری در برنامه شما ایجاد کند مگر اینکه
مستقیماً با کتابخانه در تعامل باشید.
اگر مستقیماً با این کتابخانه تعامل دارید، لطفاً
گزارش تغییرات
آن را مرور کنید .
2.x
3.x
cron-expression
جلسه
قرارداد
Session
_
احتمال تاثیر: کم
قرارداد روش
Illuminate\Contracts\Session\Session
جدیدی دریافت کرده است
pull
.
اگر این قرارداد را به صورت دستی اجرا می کنید، باید پیاده سازی خود را بر
این اساس به روز کنید:
/** * Get the value of a given key and then forget it. * * @param string $key * @param mixed $default * @return mixed */public function pull($key, $default = null);
آزمایش کردن
روش
decodeResponseJson
_
احتمال تاثیر: کم
متدی
decodeResponseJson
که متعلق به
Illuminate\Testing\TestResponse
کلاس است دیگر هیچ آرگومانی را نمی پذیرد.
لطفاً به
json
جای آن از روش استفاده کنید.
روش
assertExactJson
_
احتمال تاثیر: متوسط
این
assertExactJson
روش اکنون به کلیدهای عددی آرایه های مقایسه شده نیاز دارد تا مطابقت داشته
باشند و به ترتیب یکسان باشند.
اگر میخواهید JSON را با یک آرایه مقایسه کنید، بدون اینکه نیازی به
آرایههای دارای کلید عددی یکسان باشد، میتوانید
assertSimilarJson
به جای آن از روش استفاده کنید.
اعتبار سنجی
اتصالات قوانین پایگاه داده
احتمال تاثیر: کم
قوانین
unique
و
exists
اکنون به نام اتصال مشخص شده (که از طریق روش مدل قابل دسترسی است
getConnectionName
) مدل های Eloquent هنگام انجام پرس و جوها احترام می گذارند.
متفرقه
ما همچنین شما را تشویق می کنیم که تغییرات موجود در
laravel/laravel
مخزن GitHub
را مشاهده کنید .
در حالی که بسیاری از این تغییرات مورد نیاز نیستند، ممکن است بخواهید این
فایل ها را با برنامه خود هماهنگ نگه دارید.
برخی از این تغییرات در این راهنمای ارتقا پوشش داده خواهد شد، اما برخی
دیگر، مانند تغییرات در فایلهای پیکربندی یا نظرات، چنین نیستند.
می توانید به راحتی تغییرات را با
ابزار مقایسه GitHub
مشاهده کنید و انتخاب کنید کدام به روز رسانی برای شما مهم است.