업그레이드 가이드

매우 중요한 변경사항

중요한 변경사항

6.x에서 7.0으로 업그레이드

예상 업그레이드 시간 : 15 분

{note} 이전 버전과 호환되지 않는 모든 변경사항을 기록했습니다만 변경사항들 중 일부는 프레임워크의 모호한 부분에 있기 때문에 실제로는 여러분의 어플리케이션에 영향을 끼치지 않을 수도 있습니다.

Symfony 5 필요

영향 가능성: 높음

Laravel 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로 업데이트하십시오.

다음 자사 패키지에는 Laravel 7을 지원하기위한 새로운 주요 릴리스가 있습니다. 업그레이드가 있는 경우 개별 업그레이드 안내서를 읽어보십시오.

마지막으로, 애플리케이션에서 사용하는 다른 타사 패키지를 검사하고 Laravel 7 지원에 적합한 버전을 사용하고 있는지 확인하십시오.

Symfony 5 관련 업그레이드

영향 가능성: 높음

라라벨 7은 5.x 시리즈의 Symfony 컴포넌트를 사용합니다. 이 업그레이드를 하려면 애플리케이션을 약간 변경해야합니다.

먼저, 애플리케이션의 App\Exceptions\Handler 클래스의 report, render, shouldReport, 및 renderForConsole 메소드는 Exception 인스턴스 대신 Throwable 인터페이스의 인스턴스를 허용해야합니다.

use Throwable;

public function report(Throwable $exception);
public function shouldReport(Throwable $exception);
public function render($request, Throwable $exception);
public function renderForConsole($output, Throwable $exception);

다음으로, session 설정 파일의 secure 옵션을 null로 폴백 값을 업데이트하십시오.

'secure' => env('SESSION_SECURE_COOKIE', null),

인증

스캐폴딩

영향 가능성: 높음

모든 인증 스캐 폴딩은 laravel/ui 저장소로 옮겨졌습니다. 만약 라라벨의 인증 스캐 폴딩을 사용하고 있다면 이 패키지의 ^2.0 릴리즈를 설치해야하며 모든 환경에 패키지를 설치해야합니다. 이전에 이 패키지를 애플리케이션의 composer.json 파일의 require-dev 부분에 포함 시켰다면, require 섹션으로 이동해야합니다.

composer require laravel/ui "^2.0"

TokenRepositoryInterface

영향 가능성: 낮음

recentlyCreatedToken 메소드가 Illuminate\Auth\Passwords\TokenRepositoryInterface 인터페이스에 추가되었습니다. 이 인터페이스의 커스텀을 작성하는 경우 이 메소드를 구현에 추가해야합니다.

Blade

component 메소드

영향 가능성: 중간

Blade::component 메소드의 이름이 Blade::aliasComponent로 변경되었습니다. 이에 따라이 방법에 대한 호출을 업데이트하십시오.

블레이드 컴포넌트 및 "블레이드 X"

영향 가능성: 중간

Laravel 7에는 블레이드 "태그 컴포넌트"에 대한 자사 지원이 포함되어 있습니다. Blade의 내장 태그 컴포넌트 기능을 비활성화하려면 AppServiceProviderboot 메소드에서 withoutComponentTags 메소드를 호출 할 수 있습니다.

use Illuminate\Support\Facades\Blade;

Blade::withoutComponentTags();

addHidden / addVisible 메소드

영향 가능성: 낮음

문서화되지 않은 addHiddenaddVisible 메소드가 제거되었습니다. 대신 makeHiddenmakeVisible 메소드를 사용하십시오.

booting / booted 메소드

영향 가능성: 낮음

모델 "부팅-boot" 프로세스 중에 실행해야하는 로직을 편리하게 정의 할 수있는 장소를 제공하기 위해 bootingbooted 메서드가 Eloquent에 추가되었습니다. 이러한 이름의 모델 메소드가 이미있는 경우 메소드를 새로 추가 한 메소드와 충돌하지 않도록 메소드 이름을 바꿔야합니다.

날짜 직렬화

영향 가능성: 높음

Laravel 7은 Eloquent 모델에서 toArray 또는 toJson 메서드를 사용할 때 새로운 날짜 직렬화 형식을 사용합니다. 직렬화 날짜 형식을 지정하기 위해 이제 프레임워크는 표준 시간대 정보와 세분화된-fractional 초-seconds를 포함하여 ISO-8601 호환 날짜를 생성하는 Carbon의 toJSON 메서드를 사용합니다. 또한 이 변경은 클라이언트 측 날짜 구문 분석 라이브러리와의 지원 및 통합을 향상시킵니다.

이전에는 날짜가 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');
}

{tip} 이 변경 사항은 모델 및 모델 컬렉션을 배열 및 JSON으로의 직렬화에만 영향을 줍니다. 이 변경 사항은 데이터베이스에 날짜가 저장되는 방식에 영향을 미치지 않습니다.

Factory Types

영향 가능성: 중간

Laravel 7은 "factory types"기능을 제거합니다. 이 기능은 2016 년 10 월 이후로 문서화되지 않았습니다. 이 기능을 계속 사용하는 경우 factory states로 업그레이드해야합니다.

getOriginal 메서드

영향 가능성: 낮음

$model->getOriginal() 메소드는 이제 모델에 정의 된 모든 캐스트를 존중합니다. 이전에는 이 ​​메소드가 캐스트되지 않은 원시 속성을 리턴했습니다. 캐스팅되지 않은 원시 값을 계속 검색하려면 getRawOriginal 메소드를 대신 사용할 수 있습니다.

라우트 바인딩

영향 가능성: 낮음

Illuminate\Contracts\Routing\UrlRoutable 인터페이스의 resolveRouteBinding 메소드는 이제 $field 인수를 입력받습합니다. 이 인터페이스를 직접 구현 한 경우 구현을 업데이트해야합니다.

또한 Illuminate\Database\Eloquent\Model클래스의 resolveRouteBinding 메소드도 이제 $field 파라메터를 입력받습합니다. 이 메소드를 대체하는 경우이 인수를 입력받도록 메소드를 업데이트해야합니다.

마지막으로 Illuminate\Http\Resources\DelegatesToResources trait의 resolveRouteBinding 메소드도 이제 $field 파라메터를 입력받습합니다. 이 메소드를 대체하는 경우이 인수를 입력받도록 메소드를 업데이트해야합니다.

PSR-7 호환성

영향 가능성: 낮음

PSR-7 응답을 생성하기위한 Zend Diactoros 라이브러리는 더 이상 사용되지 않습니다. PSR-7 호환성을 위해이 패키지를 사용하는 경우, 대신 nyholm/psr7 Composer 패키지를 설치하십시오. 또한 symfony/psr-http-message-bridge Composer 패키지의 ^2.0 릴리스를 설치하십시오.

설정 파일 변경

영향 가능성: 선택적

여러 메일러를 지원하기 위해 Laravel 7.x에서 기본 mail 설정 파일이 메일러 배열을 포함하도록 변경되었습니다. 그러나 이전 버전과의 호환성을 유지하기 위해이 설정 파일의 Laravel 6.x 형식을 계속 지원합니다. 따라서 Laravel 7.x로 업그레이드 할 때 변경이 필요하지 않습니다. 그러나, 당신은 새로운 mail 설정 파일을 검토 하여 구조를 변경하고 파일을 업데이트하여 변경 사항을 반영 할 수 있습니다.

마크 다운 메일 템플릿 업데이트

영향 가능성: 중간

보다 전문적이고 매력적인 디자인으로 기본 마크 다운 메일 템플릿이 새로 고쳐졌습니다. 또한 문서화되지 않은 promotion 마크 다운 메일 컴포넌트가 제거되었습니다.

들여 쓰기는 Markdown 내에서 특별한 의미를 갖기 때문에 Markdown 메일 템플릿에는 들여 쓰기되지 않은 HTML이 필요합니다. 이전에 라라벨의 기본 메일 템플릿을 게시-published 한 경우 메일 템플릿을 다시 게시하거나 수동으로 들여 쓰기를 해제해야합니다.

php artisan vendor:publish --tag=laravel-mail --force

스위프트 메일러 바인딩

영향 가능성: 낮음

라라벨 7.x는 swift.mailerswift.transport 컨테이너 바인딩을 제공하지 않습니다. 이제 메일러 바인딩을 통해 이러한 객체에 액세스 할 수 있습니다.

$swiftMailer = app('mailer')->getSwiftMailer();

$swiftTransport = $swiftMailer->getTransport();

더 이상 사용되지 않는 -daemon 플래그 제거

영향 가능성: 낮음

queue:work 명령에서 사용되지 않는 --daemon 플래그가 제거되었습니다. 워커가 기본적으로 데몬으로 실행되므로이 ​​플래그는 더 이상 필요하지 않습니다.

Resources

Illuminate\Http\Resources\Json\Resource Class

영향 가능성: 낮음

더 이상 사용되지 않는 Illuminate\Http\Resources\Json\Resource 클래스가 제거되었습니다. 리소스는 대신Illuminate\Http\Resources\Json\JsonResource 클래스를 확장해야합니다.

라우터 getRoutes 메소드

영향 가능성: 낮음

라우터의 getRoutes 메소드는 이제 Illuminate\Routing\RouteCollection 대신 Illuminate\Routing\RouteCollectionInterface의 인스턴스를 반환합니다.

고유한 라우트 이름

영향 가능성: 중간

공식적으로 문서화 된 적이 없지만 이전 Laravel 릴리스에서는 동일한 이름으로 두 개의 다른 경로를 정의 할 수 있습니다. Laravel 7에서는 더 이상 가능하지 않으므로 항상 라우트에 고유한 이름을 제공해야합니다. 이름이 중복 된 라우트는 프레임 워크의 여러 영역에서 예기치 않은 동작을 일으킬 수 있습니다.

CORS 지원

영향 가능성: 중간

Cross-Origin Resource Sharing (CORS) 지원이 기본적으로 통합되었습니다. 타사 CORS 라이브러리를 사용하는 경우 이제 새로운 cors 설정 파일 을 사용하는 것이 좋습니다.

다음으로 기본 CORS 라이브러리를 애플리케이션의 의존성으로 설치하십시오.

composer require fruitcake/laravel-cors

마지막으로 \Fruitcake\Cors\HandleCors::class 미들웨어를 App\Http\Kernel 글로벌 미들웨어 목록에 추가하십시오.

Session

array Session Driver

영향 가능성: 낮음

array세션 드라이버 데이터는 이제 현재 request에 대해 영속적입니다. 이전에는 현재 request 도중에도 array세션에 저장된 데이터를 검색 할 수 없었습니다.

Testing

assertSee Assertion

영향 가능성: 중간

TestResponse 클래스의 assertSeeassertDontSee 검증은 이제 자동으로 값을 이스케이프합니다. 이러한 검증에 전달 된 값을 수동으로 이스케이프 처리하면 더 이상 그렇게하지 않아야합니다. 이스케이프 처리되지 않은 값을 지정해야하는 경우 메소드의 두 번째 인수로 false를 전달할 수 있습니다.

TestResponse Class

영향 가능성: 낮음

Illuminate\Foundation\Testing\TestResponse 클래스의 이름이 Illuminate\Testing\TestResponse로 변경되었습니다. 이 클래스를 확장하는 경우 네임스페이스를 업데이트하십시오.

Assert Class

영향 가능성: 낮음

Illuminate\Foundation\Testing\Assert 클래스의 이름이 Illuminate\Testing\Assert로 변경되었습니다. 이 클래스를 사용하는 경우 네임스페이스를 업데이트하십시오.

검증

different Rule

영향 가능성: 중간

지정된 파라메터 중 하나가 요청에서 누락되면 different규칙이 실패합니다.

기타

laravel/laravel GitHub 저장소에서 변경사항들을 확인해보시길 권합니다. 변경사항들 중 많은 부분들은 필수는 아니지만, 업데이트 된 파일들을 여러분의 어플리케이션에 동기화 해두는게 좋습니다. 변경사항들 중 일부는 이 업그레이드 가이드에서 설명되었지만 설정 파일이나 코멘트같은 다른 변경사항들은 그렇지 않았습니다. GitHub comparison tool을 이용해 변경사항들을 쉽게 살펴보고 어떤 변경사항이 여러분에게 중요한지 살펴보세요.