نسخه:

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

ارتقا به 5.0.16

bootstrap/autoload.php در فایل خود ، $compiledPath متغیر را به روز کنید:

$compiledPath = __DIR__.'/../vendor/compiled.php';

ارتقا به 5.0 از 4.2

تازه نصب کنید، سپس مهاجرت کنید

روش توصیه شده برای ارتقا، ایجاد یک 5.0 نصب جدید لاراول و سپس کپی کردن 4.2 فایل های کاربردی منحصر به فرد سایت خود در برنامه جدید است. این شامل کنترلرها، مسیرها، مدل‌های Eloquent، دستورات Artisan، دارایی‌ها و سایر کدهای خاص برنامه شما می‌شود.

برای شروع، یک برنامه جدید Laravel 5 را در یک فهرست جدید در محیط محلی خود نصب کنید. در زیر به هر بخش از فرآیند مهاجرت با جزئیات بیشتر بحث خواهیم کرد.

وابستگی ها و بسته های composer

فراموش نکنید که هر وابستگی اضافی Composer را در برنامه 5.0 خود کپی کنید. این شامل کدهای شخص ثالث مانند SDK می شود.

برخی از بسته‌های مخصوص لاراول ممکن است در زمان انتشار اولیه با لاراول 5 سازگار نباشند. برای تعیین نسخه مناسب بسته برای لاراول 5 با نگهدارنده بسته خود تماس بگیرید. پس از افزودن وابستگی های اضافی Composer به برنامه خود، اجرا کنید composer update .

فاصله نام

به طور پیش فرض، برنامه های لاراول 4 از فاصله نام در کد برنامه شما استفاده نمی کنند. بنابراین، برای مثال، تمام مدل‌ها و کنترل‌کننده‌های Eloquent به سادگی در فضای نام «جهانی» زندگی می‌کردند. برای انتقال سریع تر، می توانید به سادگی این کلاس ها را در فضای نام جهانی در لاراول 5 نیز رها کنید.

پیکربندی

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

فایل جدید .env.example را در کپی کنید .env که 5.0 معادل فایل قدیمی است .env.php . مقادیر مناسب را در آنجا تنظیم کنید، مانند خود APP_ENV و APP_KEY (کلید رمزگذاری شما)، اعتبار پایگاه داده خود، و حافظه پنهان و درایورهای جلسه.

علاوه بر این، هر مقدار سفارشی را که در فایل قدیمی خود داشتید کپی کنید .env.php و آنها را در هر دو .env (مقدار واقعی برای محیط محلی خود) و .env.example (مقدار آموزشی نمونه برای سایر اعضای تیم) قرار دهید.

برای اطلاعات بیشتر در مورد پیکربندی محیط، مستندات کامل را مشاهده کنید .

توجه: .env قبل از استقرار برنامه Laravel 5، باید فایل و مقادیر مناسب را روی سرور تولید خود قرار دهید .

فایل های پیکربندی

لاراول 5.0 دیگر از app/config/{environmentName}/ دایرکتوری ها برای ارائه فایل های پیکربندی خاص برای یک محیط خاص استفاده نمی کند. در عوض، هر مقدار پیکربندی را که بر اساس محیط متفاوت است را به داخل منتقل کنید .env و سپس با استفاده از فایل های پیکربندی خود به آنها دسترسی داشته باشید env('key', 'default value') . نمونه هایی از این مورد را در فایل پیکربندی مشاهده خواهید کرد config/database.php .

فایل‌های پیکربندی را در config/ دایرکتوری تنظیم کنید تا مقادیری را نشان دهند که در همه محیط‌های شما یکسان هستند، یا آن‌ها را برای env() بارگیری مقادیری که بسته به محیط متفاوت هستند، تنظیم کنید.

به یاد داشته باشید، اگر کلیدهای بیشتری به فایل اضافه می کنید ، مقادیر نمونه را نیز .env به فایل اضافه کنید . .env.example این به سایر اعضای تیم شما کمک می کند تا فایل های خود را ایجاد کنند .env .

مسیرها

فایل قدیمی خود را کپی کرده و routes.php در فایل جدید خود جایگذاری کنید app/Http/routes.php .

کنترل کننده ها

بعد، تمام کنترلرهای خود را به app/Http/Controllers دایرکتوری منتقل کنید. از آنجایی که در این راهنما قصد نداریم به فضای نام کامل مهاجرت کنیم، دایرکتوری را app/Http/Controllers به classmap دستورالعمل فایل خود اضافه کنید composer.json . در مرحله بعد، می توانید فضای نام را از app/Http/Controllers/Controller.php کلاس پایه انتزاعی حذف کنید. بررسی کنید که کنترلرهای منتقل شده شما این کلاس پایه را گسترش می دهند.

در فایل خود app/Providers/RouteServiceProvider.php ، namespace ویژگی را روی null .

فیلترهای مسیر

اتصالات فیلتر خود را از آن کپی کرده و در روش app/filters.php قرار دهید . برای ادامه استفاده از نما، را اضافه کنید . boot() app/Providers/RouteServiceProvider.php use Illuminate\Support\Facades\Route; app/Providers/RouteServiceProvider.php Route

نیازی نیست که روی هیچ یک از فیلترهای پیش فرض لاراول 4.0 مانند auth و csrf ; همه آنها اینجا هستند، اما به عنوان میان افزار. هر مسیر یا کنترل‌کننده‌ای را که به فیلترهای پیش‌فرض قدیمی ارجاع می‌دهند (مثلاً ['before' => 'auth'] ) ویرایش کنید و آنها را برای ارجاع به میان‌افزار جدید تغییر دهید (مثلاً ['middleware' => 'auth']. )

before فیلترها در لاراول 5 حذف نمی شوند. همچنان می توانید با استفاده از و از فیلترهای سفارشی خود استفاده کنید after .

CSRF جهانی

به طور پیش فرض، حفاظت CSRF در همه مسیرها فعال است. اگر می‌خواهید این را غیرفعال کنید یا فقط به صورت دستی آن را در مسیرهای خاصی فعال کنید، این خط را از آرایه حذف App\Http\Kernel کنید middleware :

'App\Http\Middleware\VerifyCsrfToken',

اگر می خواهید از آن در جای دیگری استفاده کنید، این خط را به $routeMiddleware :

'csrf' => 'App\Http\Middleware\VerifyCsrfToken',

اکنون می‌توانید میان‌افزار را به مسیرها / کنترل‌کننده‌های جداگانه با استفاده ['middleware' => 'csrf'] از مسیر اضافه کنید. برای اطلاعات بیشتر در مورد میان افزار، به مستندات کامل مراجعه کنید .

مدل های الکوئنت

با خیال راحت یک دایرکتوری جدید برای قرار دادن مدل های Eloquent خود ایجاد کنید app/Models . دوباره این دایرکتوری را به classmap دایرکتیو فایل خود اضافه کنید composer.json .

هر مدلی را با استفاده از SoftDeletingTrait برای استفاده به روز کنید Illuminate\Database\Eloquent\SoftDeletes .

ذخیره سازی الکوئنت

Eloquent دیگر remember روشی را برای کش کردن پرس و جوها ارائه نمی دهد. اکنون شما مسئول ذخیره سازی پرسش های خود به صورت دستی با استفاده از Cache::remember تابع هستید. برای اطلاعات بیشتر در مورد ذخیره سازی، به مستندات کامل مراجعه کنید .

مدل احراز هویت کاربر

برای ارتقای User مدل خود برای سیستم احراز هویت لاراول 5، این دستورالعمل ها را دنبال کنید:

موارد زیر را از use بلوک خود حذف کنید:

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

موارد زیر را به use بلوک خود اضافه کنید:

use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

رابط های UserInterface و RemindableInterface را حذف کنید.

کلاس را به عنوان در حال پیاده سازی رابط های زیر علامت گذاری کنید:

implements AuthenticatableContract, CanResetPasswordContract

ویژگی های زیر را در اعلان کلاس بگنجانید:

use Authenticatable, CanResetPassword;

اگر از آنها استفاده کردید، بلوک استفاده و اعلان کلاس خود را حذف Illuminate\Auth\Reminders\RemindableTrait کنید Illuminate\Auth\UserTrait .

تغییرات کاربر صندوقدار

نام صفت و رابط مورد استفاده توسط Laravel Cashier تغییر کرده است. به جای استفاده از خصیصه BillableTrait استفاده کنید Laravel\Cashier\Billable . و به جای Laravel\Cashier\BillableInterface پیاده سازی Laravel\Cashier\Contracts\Billable رابط به جای آن. هیچ تغییر روش دیگری مورد نیاز نیست.

دستورات صنعتگر

تمام کلاس های فرمان خود را از app/commands دایرکتوری قدیمی خود به دایرکتوری جدید منتقل کنید app/Console/Commands . بعد، app/Console/Commands دایرکتوری را به classmap راهنمای فایل خود اضافه کنید composer.json .

سپس لیست دستورات Artisan خود را start/artisan.php در commands آرایه فایل کپی کنید app/Console/Kernel.php .

پایگاه داده مهاجرت و دانه

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

تمام کلاس های مهاجرت خود را از app/database/migrations دایرکتوری قدیمی به فهرست جدید منتقل کنید database/migrations . همه دانه های شما باید از app/database/seeds به database/seeds .

اتصالات جهانی IoC

اگر هر گونه اتصال IoC در دارید start/global.php ، همه آنها را به register روش فایل منتقل کنید app/Providers/AppServiceProvider.php . ممکن است لازم باشد App نما را وارد کنید.

در صورت تمایل، می توانید این اتصالات را بر اساس دسته بندی به ارائه دهندگان خدمات جداگانه تقسیم کنید.

بازدیدها

نماهای خود را از دایرکتوری app/views جدید منتقل کنید resources/views .

تغییرات تگ Blade

برای امنیت بهتر به صورت پیش‌فرض، Laravel 5.0 از تمام خروجی‌های هر دو دستورالعمل {{ }} و {{{ }}} Blade فرار می‌کند. دستورالعمل جدیدی {!! !!} برای نمایش خروجی خام و بدون فرار معرفی شده است. ایمن ترین گزینه در هنگام ارتقاء برنامه خود این است که فقط {!! !!} زمانی از دستورالعمل جدید استفاده کنید که مطمئن باشید نمایش خروجی خام ایمن است.

با این حال، اگر باید از نحو قدیمی Blade استفاده کنید، خطوط زیر را در پایین اضافه کنید AppServiceProvider@register :

\Blade::setRawTags('{{', '}}');
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{{', '}}}');

این کار نباید ساده انجام شود و ممکن است برنامه شما را در برابر اکسپلویت های XSS آسیب پذیرتر کند. همچنین، نظرات با {{--دیگر کار نخواهد کرد.

فایل های ترجمه

فایل های زبان خود را از دایرکتوری app/langجدید منتقل کنید resources/lang.

دایرکتوری عمومی

دارایی های عمومی برنامه خود را از فهرست 4.2برنامه خود publicدر فهرست برنامه جدید خود کپی کنید public. حتما 5.0نسخه ی را نگه دارید index.php.

تست ها

تست های خود را از دایرکتوری app/testsجدید منتقل کنید tests.

متفرقه فایل ها

در هر فایل دیگری در پروژه خود کپی کنید. به عنوان مثال .scrutinizer.yml، bower.jsonو سایر فایل های پیکربندی ابزار مشابه.

می توانید Sass، Less یا CoffeeScript خود را به هر مکانی که می خواهید منتقل کنید. دایرکتوری resources/assetsمی تواند مکان پیش فرض خوبی باشد.

راهنماهای فرم و HTML

اگر از کمک‌کننده‌های فرم یا HTML استفاده می‌کنید، با خطایی مواجه می‌شوید که بیان می‌کند class 'Form' not foundیا class 'Html' not found. کمک کننده های فرم و HTML در لاراول 5.0 منسوخ شده اند. با این حال، جایگزین‌های مبتنی بر جامعه مانند آنهایی که توسط Laravel Collective نگهداری می‌شوند، وجود دارد .

به عنوان مثال، می توانید به بخش فایل "laravelcollective/html": "~5.0"خود اضافه کنید .composer.jsonrequire

همچنین باید نماهای فرم و HTML و ارائه دهنده خدمات را اضافه کنید. config/app.phpاین خط را به آرایه ارائه دهندگان ویرایش و اضافه کنید:

'Collective\Html\HtmlServiceProvider',

بعد، این خطوط را به آرایه "نام مستعار" اضافه کنید:

'Form' => 'Collective\Html\FormFacade',
'Html' => 'Collective\Html\HtmlFacade',

CacheManager

اگر کد برنامه شما Illuminate\Cache\CacheManagerبرای دریافت یک نسخه غیر Facade از کش لاراول تزریق می شد، Illuminate\Contracts\Cache\Repositoryبه جای آن تزریق کنید.

صفحه بندی

هر تماسی را جایگزین $paginator->links()کنید $paginator->render().

هر تماسی را با $paginator->getFrom()و به ترتیب جایگزین کنید.$paginator->getTo()$paginator->firstItem()$paginator->lastItem()

پیشوند «دریافت» را از تماس‌ها با ، $paginator->getPerPage()و ( مثلاً ) حذف کنید.$paginator->getCurrentPage()$paginator->getLastPage()$paginator->getTotal()$paginator->perPage()

صف لوبیا

اکنون لاراول 5.0 "pda/pheanstalk": "~3.0"به جای نیاز به "pda/pheanstalk": "~2.1".

از راه دور

مؤلفه Remote منسوخ شده است.

میز کار

جزء Workbench منسوخ شده است.

ارتقا به 4.2 از 4.1

PHP 5.4+

لاراول 4.2 به PHP 5.4.0 یا بالاتر نیاز دارد.

پیش فرض های رمزگذاری

یک گزینه جدید در فایل پیکربندی cipherخود اضافه کنید. app/config/app.phpمقدار این گزینه باید باشد MCRYPT_RIJNDAEL_256.

'cipher' => MCRYPT_RIJNDAEL_256

این تنظیم ممکن است برای کنترل رمز پیش فرض استفاده شده توسط امکانات رمزگذاری لاراول استفاده شود.

نکته: در لاراول 4.2 رمز پیش فرض MCRYPT_RIJNDAEL_128(AES) است که امن ترین رمز به حساب می آید. MCRYPT_RIJNDAEL_256برای رمزگشایی کوکی ها/مقدارهایی که در لاراول <= 4.1 رمزگذاری شده اند، باید رمز را تغییر دهید.

مدل‌های حذف نرم اکنون از ویژگی‌ها استفاده می‌کنند

اگر از مدل‌های حذف نرم استفاده می‌کنید، softDeletesویژگی حذف شده است. اکنون باید از SoftDeletingTraitمشابه استفاده کنید تا:

use Illuminate\Database\Eloquent\SoftDeletingTrait;
 
class User extends Eloquent {
use SoftDeletingTrait;
}

همچنین باید به صورت دستی deleted_atستون را به ویژگی خود اضافه کنید dates:

class User extends Eloquent {
use SoftDeletingTrait;
 
protected $dates = ['deleted_at'];
}

API برای تمام عملیات حذف نرم یکسان باقی می ماند.

توجه: نمی توان آن را SoftDeletingTraitدر مدل پایه اعمال کرد. باید در یک کلاس مدل واقعی استفاده شود.

مشاهده / محیط صفحه بندی تغییر نام داد

اگر مستقیماً به Illuminate\View\Environmentکلاس یا Illuminate\Pagination\Environmentکلاس ارجاع می دهید، کد خود را به مرجع Illuminate\View\Factoryو Illuminate\Pagination\Factoryدر عوض به روز کنید. این دو کلاس تغییر نام داده اند تا عملکرد آنها را بهتر نشان دهند.

پارامتر اضافی در ارائه دهنده صفحه بندی

اگر کلاس را گسترش می دهید Illuminate\Pagination\Presenter، امضای متد انتزاعی getPageLinkWrapperبرای اضافه کردن آرگومان تغییر کرده است rel:

abstract public function getPageLinkWrapper($url, $page, $rel = null);

رمزگذاری صف Iron.Io

اگر از درایور صف Iron.io استفاده می کنید، باید یک encryptگزینه جدید به فایل پیکربندی صف خود اضافه کنید:

'encrypt' => true

ارتقاء به 4.1.29 از <= 4.1.x

Laravel 4.1.29 نقل قول ستون را برای همه درایورهای پایگاه داده بهبود می بخشد. این برنامه شما را از برخی آسیب‌پذیری‌های تخصیص انبوه در هنگام عدم استفاده از fillableویژگی در مدل‌ها محافظت می‌کند. اگر از ویژگی روی مدل های خود برای محافظت در برابر تخصیص انبوه استفاده می کنید fillable، برنامه شما آسیب پذیر نیست. با این حال، اگر از یک آرایه کنترل‌شده توسط کاربر استفاده می‌کنید guardedو آن را به یک تابع نوع «به‌روزرسانی» یا «ذخیره» منتقل می‌کنید، باید 4.1.29فوراً آن را ارتقا دهید زیرا ممکن است برنامه شما در معرض خطر تخصیص انبوه باشد.

برای ارتقاء به لاراول 4.1.29، به سادگی composer update. هیچ تغییری در این نسخه ارائه نشده است.

ارتقا به 4.1.26 از <= 4.1.25

لاراول 4.1.26 بهبودهای امنیتی را برای کوکی‌های «مرا به خاطر بسپار» معرفی می‌کند. قبل از این به‌روزرسانی، اگر یک کاربر مخرب دیگر یک کوکی حافظه ربوده شود، کوکی برای مدت طولانی معتبر باقی می‌ماند، حتی پس از اینکه صاحب واقعی حساب رمز عبور خود را بازنشانی کند، از سیستم خارج شود و غیره.

این تغییر مستلزم افزودن یک remember_tokenستون جدید به جدول پایگاه داده شما users(یا معادل آن) است. پس از این تغییر، هر بار که کاربر به برنامه شما وارد می شود، یک توکن جدید به آن اختصاص داده می شود. هنگامی که کاربر از برنامه خارج می شود، توکن نیز به روز می شود. پیامدهای این تغییر عبارتند از: اگر یک کوکی "مرا به خاطر بسپار" ربوده شود، صرفاً خروج از برنامه، کوکی را باطل می کند.

مسیر را ارتقا دهید

ابتدا، یک remember_tokenVARCHAR(100)، TEXT یا معادل آن را به usersجدول خود اضافه کنید.

در مرحله بعد، اگر از درایور احراز هویت Eloquent استفاده می کنید، Userکلاس خود را با سه روش زیر به روز کنید:

public function getRememberToken()
{
return $this->remember_token;
}
 
public function setRememberToken($value)
{
$this->remember_token = $value;
}
 
public function getRememberTokenName()
{
return 'remember_token';
}

توجه: با این تغییر تمام جلسات «مرا به خاطر بسپار» نامعتبر می‌شود، بنابراین همه کاربران مجبور می‌شوند دوباره با برنامه شما احراز هویت کنند.

نگهدارنده های بسته

دو روش جدید به رابط اضافه شد Illuminate\Auth\UserProviderInterface. پیاده سازی های نمونه ممکن است در درایورهای پیش فرض پیدا شوند:

public function retrieveByToken($identifier, $token);
 
public function updateRememberToken(UserInterface $user, $token);

همچنین Illuminate\Auth\UserInterfaceسه روش جدید شرح داده شده در "مسیر ارتقا" را دریافت کرد.

ارتقا به 4.1 از 4.0

ارتقاء وابستگی composer شما

برای ارتقاء برنامه خود به لاراول 4.1، laravel/frameworkنسخه خود را به فایل 4.1.*خود تغییر دهید composer.json.

جایگزین کردن فایل ها

فایل خود public/index.phpرا با این نسخه جدید از مخزن جایگزین کنید .

فایل خود artisanرا با این نسخه جدید از مخزن جایگزین کنید .

افزودن فایل‌ها و گزینه‌های پیکربندی

aliasesآرایه ها و آرایه های خود را providersدر app/config/app.phpفایل پیکربندی خود به روز کنید. مقادیر به روز شده برای این آرایه ها را می توان در این فایل یافت . مطمئن شوید که ارائه دهندگان خدمات سفارشی و بسته خود را / نام مستعار به آرایه ها اضافه کنید.

app/config/remote.phpفایل جدید را از مخزن اضافه کنید .

expire_on_closeگزینه پیکربندی جدید را به app/config/session.phpفایل خود اضافه کنید. مقدار پیش فرض باید باشد false.

failedبخش پیکربندی جدید را به app/config/queue.phpفایل خود اضافه کنید. در اینجا مقادیر پیش فرض این بخش آمده است:

'failed' => [
'database' => 'mysql', 'table' => 'failed_jobs',
],

(اختیاری) گزینه پیکربندی را در فایل paginationخود به روز کنید .app/config/view.phppagination::slider-3

به روز رسانی های کنترلر

اگر عبارتی در بالا app/controllers/BaseController.phpدارد ، به تغییر دهید .useuse Illuminate\Routing\Controllers\Controller;use Illuminate\Routing\Controller;

به روز رسانی یادآوری رمز عبور

یادآوری رمز عبور برای انعطاف پذیری بیشتر بازنگری شده است. با اجرای دستور Artisan می توانید کنترلر جدید خرد را بررسی کنید php artisan auth:reminders-controller. همچنین می توانید اسناد به روز شده را مرور کنید و برنامه خود را مطابق با آن به روز کنید.

app/lang/en/reminders.phpفایل زبان خود را برای مطابقت با این فایل به روز شده به روز کنید .

به روز رسانی های تشخیص محیط

به دلایل امنیتی، دامنه های URL ممکن است دیگر برای شناسایی محیط برنامه شما استفاده نشوند. این مقادیر به راحتی قابل جعل هستند و به مهاجمان اجازه می دهند تا محیط یک درخواست را تغییر دهند. شما باید تشخیص محیط خود را به استفاده از نام میزبان ماشین ( hostnameفرمان در مک، لینوکس و ویندوز) تبدیل کنید.

فایل های لاگ ساده تر

لاراول اکنون یک فایل لاگ واحد تولید می کند: app/storage/logs/laravel.log. با این حال، همچنان ممکن است این رفتار را در app/start/global.phpفایل خود پیکربندی کنید.

حذف اسلش دنباله دار تغییر مسیر

در bootstrap/start.phpفایل خود، تماس با را حذف کنید $app->redirectIfTrailingSlash(). این روش دیگر مورد نیاز نیست زیرا این عملکرد اکنون توسط .htaccessفایل همراه با فریمورک کنترل می شود.

در مرحله بعد، فایل آپاچی خود .htaccessرا با این فایل جدید جایگزین کنید که اسلش های انتهایی را مدیریت می کند.

دسترسی به مسیر فعلی

اکنون مسیر فعلی Route::current()به جای Route::getCurrentRoute().

به روز رسانی composer

پس از تکمیل تغییرات بالا، می توانید composer updateعملکرد را برای به روز رسانی فایل های برنامه اصلی خود اجرا کنید! اگر خطاهای بارگذاری کلاس را دریافت کردید، updateدستور را با --no-scriptsگزینه فعال مانند زیر اجرا کنید: composer update --no-scripts.

شنوندگان رویداد Wildcard

شنوندگان رویدادهای wildcard دیگر رویداد را به پارامترهای توابع کنترل کننده شما اضافه نمی کنند. اگر نیاز به یافتن رویدادی دارید که اخراج شده است، باید از آن استفاده کنید Event::firing().