업그레이드 지침


ㅠㅠ

업그레이드 가이드

  • 5.7 5.8.0으로 업그레이드

매우 큰 영향을 미치는 변경 사항

  • 초 단위의 캐시 TTL
  • 캐시 잠금 보안 개선
  • 마크다운 파일 경로 변경
  • Nexmo/Slack 알림 채널 변경

중간 변경 사항이

에 영향을 미침
  • 컨테이너 빌더 및 태그 서비스
  • SQLite 버전 제약
  • 헬퍼를 문자열 및 배열의 ​​클래스로 대체
  • 더 이상 사용되지 않는 지연된 서비스 공급자
  • PSR-16 사양 준수
  • 불규칙성 개선
  • 로 끝나는 복수형 모델 이름 중간 테이블 모델은 자동 증가 ID 속성을 추가합니다
  • Pheanstalk 4.0 라이브러리 지원

Laravel 5.7에서 5.8로 업데이트

예상 업그레이드 시간: 1시간

참고: 가능한 모든 변경 사항을 문서화하려고 노력합니다. 대부분의 주요 변경 사항은 프레임워크 내부에서 발생하므로 이러한 변경 사항 중 일부만 애플리케이션에 영향을 미칠 수 있습니다.

종속성 업데이트

composer.json에서 laravel/framework 종속성을 5.8.*로 업데이트하세요. composer.json 中,将 laravel/framework 依赖项更新为 5.8.*

接下来,检查应用程序中已安装的第三方包是否支持 Laravel 5.8,并检查已安装的版本是否正确。

应用契约

environment 方法

影响可能性:非常低

Illuminate/Contracts/Foundation/Application  类 environment 方法的签名已修改。如果在您的应用程序中重写了这个方法,您应该更新此方法的签名:

/**
 * 获取或检查当前应用程序的环境
 *
 * @param  string|array  $environments
 * @return string|bool
 */public function environment(...$environments);

新添加的方法

影响可能性:非常低

以下新添加方法 bootstrapPath, configPath, databasePath, environmentPath, resourcePath, storagePath, resolveProvider, bootstrapWith, configurationIsCached, detectEnvironment, environmentFile, environmentFilePath, getCachedConfigPath, getCachedRoutesPath, getLocale, getNamespace, getProviders, hasBeenBootstrapped, loadDeferredProviders, loadEnvironmentFrom, routesAreCached, setLocale, shouldSkipMiddleware, terminate 将会被添加到 Illuminate/Contracts/Foundation/Application 中.

如果你实现了这个接口,你应该将这些方法添加到实现类中。

认证

重置密码通知路由参数

影响可能性:低

当用户点击重置密码链接时,Laravel 使用 route 助手生成 URL ,以创建指向以 password.reset 命名的路由,当使用 Laravel 5.7 的时候,token 将会被传递到不带显式名称的 route 助手,比如:

route('password.reset', $token);

当你使用 Laravel 5.8 时,token 作为显式参数传递给 route 助手:

route('password.reset', ['token' => $token]);

因此,如果你要定义自己的 password.reset

다음으로, 애플리케이션에 설치된 타사 패키지가 Laravel 5.8을 지원하는지 확인하고 설치된 버전이 올바른지 확인하세요.

애플리케이션 계약

환경 방법

영향 가능성: 매우 낮음

Illuminate/Contracts/Foundation/Application 클래스 환경 메소드의 서명이 수정되었습니다. 애플리케이션에서 이 메서드가 재정의된 경우 이 메서드의 서명을 업데이트해야 합니다.

// Laravel 5.7 - 存储数据30分钟
Cache::put('foo', 'bar', 30);// Laravel 5.8 - 存储数据30秒
Cache::put('foo', 'bar', 30);// Laravel 5.7 / 5.8 - 存储数据30秒
Cache::put('foo', 'bar', now()->addSeconds(30));

새로 추가된 메서드

영향 가능성: 매우 낮음

🎜🎜새로 추가된 다음 메서드 bootstrapPath, < code>configPath, databasePath, environmentPath, resourcePath, storagePath, resolveProvider, bootstrapWith, configurationIsCached, DetectEnvironment, environmentFile, environmentFilePath, getCachedConfigPath, getCachedRoutesPath, getLocale, getNamespace, getProviders, hasBeenBootstrapped, loadDeferredProviders, loadEnvironmentFrom, routesAreCached, setLocale, shouldSkipMiddleware , 종료Illuminate/Contracts/Foundation/Application에 추가됩니다. 🎜🎜이 인터페이스를 구현하는 경우 구현 클래스에 이러한 메서드를 추가해야 합니다. 🎜🎜인증🎜🎜비밀번호 재설정 알림 경로 매개변수 🎜🎜🎜영향 가능성: 낮음 🎜🎜🎜사용자가 비밀번호 재설정 링크를 클릭하면 Laravel은 route 도우미를 사용하여 링크를 생성하는 URL을 생성합니다. < code>password.reset 이름이 지정된 경로인 경우 Laravel 5.7을 사용할 때 토큰은 다음과 같이 명시적인 이름 없이 route 도우미에 전달됩니다: 🎜
Cache::lock('foo', 10)->get(function () {    // 锁将会被安全的自动释放});
🎜Laravel에서 사용하는 경우 5.8에서는 토큰이 route 도우미에 명시적 매개변수로 전달됩니다. 🎜
if (($lock = Cache::lock('foo', 10))->get()) {    // 执行任务…    $lock->release();}
🎜 따라서 자신만의 password.reset 경로를 정의하려면 해당 URI가 다음과 같아야 합니다. 토큰 매개변수를 포함합니다. 🎜🎜기본 비밀번호 길이 변경🎜🎜🎜잠재적 영향: 낮음 🎜🎜🎜비밀번호를 선택하거나 재설정할 때 필요한 비밀번호 길이가 8자 이상으로 변경되었습니다. 🎜🎜캐시🎜🎜TTL(초)🎜🎜🎜잠재적 영향: 매우 높음🎜🎜

데이터를 저장할 때 더 세분화된 만료 시간을 허용하기 위해 캐시된 데이터 수명이 분에서 초로 변경되었습니다. IlluminateCacheRepository 클래스 및 해당 확장 클래스에 대한 put , putMany , add , remember 이 업데이트는 모든 캐시 메모리의 setDefaultCacheTime 메소드와 put 메소드에 의해 완료됩니다. 자세한 내용은 관련 PR을 참고하시기 바랍니다. IlluminateCacheRepository 类和它的扩展类的 put ,  putMany ,  add ,  remembersetDefaultCacheTime 方法,以及所有缓存存储器的 put 方法都完成了此更新。详情请看 相关的 PR  。

如果要向这些方法中的任何一个传递整数,请更新代码以确保保留在缓存中的数据传递的数值是秒。另外,你可以传递一个 DateTime 实例指示数据何时到期:

// 在控制器中…$podcast = Podcast::find(1);
if (($lock = Cache::lock('foo', 120))->get()) {
    ProcessPodcast::dispatch($podcast, $lock->owner());}// 在进程广播队列中…
Cache::restoreLock('foo', $this->owner)->release();

{提示} 此更改使 Laravel 缓存系统完全符合 PSR-16 缓存库标准 。

遵循 PSR-16

影响可能性:中等

除了以上返回值有变化之外,本次升级还更新了 IlluminateCacheRepository 类中的 putputManyadd 方法的 TTL 参数,使之更符合 PSR-16 规范。新特性提供了一个默认的 null ,所以如果不指定 TTL 值,那么缓存将会永久存储不会过期。此外,如果缓存项的 TTL 为 0 或者更小,那么将会被清除。参阅 相关的 PR 获取更多信息。

KeyWritten 事件基于这些变动 也进行了更新 。

锁安全性改善

影响可能性:高

在 Laravel 5.7 以及 Laravel 更早的版本的中,一些缓存驱动提供的 “原子锁” 特性,可能由于一些意外行为导致锁被提前释放。

例如: 客户端 A 获取了一个 10 秒过期的锁 foo客户端 A 实际上需要耗费 20 秒来完成它的任务。在客户端 A 任务执行期间,锁被缓存系统自动释放。之后 客户端 B 获取到锁 foo。最终 客户端 A 完成了它的任务并释放掉锁 foo,但是无意中释放了 客户端 B 所持有的锁。这时候 客户端 C 又可以获取到锁。

为了缓解这种情况,现在使用嵌入的「范围令牌」生成锁,这样可以确保在正常情况下,只有锁的持有者才能释放锁。

如果你正在使用 Cache::lock()->get(Closure) 方法使用锁,则不需要进行任何更改:

Cache::lock('foo')->forceRelease();

但是,如果要手动调用, Cache::lock()->release() ,则必须更新代码以维护锁的实例。然后,在完成任务后,可以在同一个锁实例上调用 release

이러한 메소드에 정수를 전달하는 경우 캐시에 보관되는 데이터가 몇 초 안에 전달되도록 코드를 업데이트하세요. 추가적으로, 데이터가 만료되는 시기를 나타내기 위해 DateTime 인스턴스를 전달할 수 있습니다: 🎜
/**
 * Get the first item by the given key value pair.
 *
 * @param  string  $key
 * @param  mixed  $operator
 * @param  mixed  $value
 * @return mixed
 */public function firstWhere($key, $operator = null, $value = null);
🎜{Tip} 이러한 변경으로 인해 Laravel 캐시 시스템은 PSR-16 캐시 라이브러리 표준과 완전히 호환됩니다. 🎜

PSR-16 준수

🎜영향 가능성: 중간🎜🎜위 반환 값의 변경 사항 외에도 이번 업그레이드에서는 <코드도 업데이트됩니다. > 클래스의 put, putManyadd 메소드에 대한 IlluminateCacheRepository TTL 매개변수를 사용하여 PSR-16과 더욱 호환되게 만듭니다. 사양. 새로운 기능은 기본 null 을 제공하므로 TTL 값이 지정되지 않으면 캐시가 영구적으로 저장되고 만료되지 않습니다. 또한 TTL이 0 이하인 경우 캐시 항목이 지워집니다. 자세한 내용은 관련 PR을 참조하세요. 🎜🎜이러한 변경 사항에 따라 KeyWritten 이벤트도 업데이트되었습니다. 🎜

잠금 보안 개선

🎜영향 가능성: 높음🎜🎜Laravel 5.7 및 이전 버전의 Laravel에서는 일부 캐시 드라이버에서 제공하는 "원자 잠금" 기능이 잠금이 발생할 수 있습니다. 예상치 못한 행동으로 인해 조기에 출시될 수 있습니다. 🎜🎜예: 클라이언트 A는 10초 안에 만료되는 잠금 foo를 획득합니다. 클라이언트 A는 실제로 작업을 완료하는 데 20초가 걸립니다. 클라이언트 A 작업을 실행하는 동안 캐시 시스템에 의해 잠금이 자동으로 해제됩니다. 그 후 클라이언트 Bfoo 잠금을 획득합니다. 결국 클라이언트 A는 작업을 완료하고 foo 잠금을 해제하지만, 클라이언트 B가 보유한 잠금을 실수로 해제합니다. 이때 클라이언트 C는 잠금을 다시 얻을 수 있습니다. 🎜🎜이 상황을 완화하기 위해 이제 내장된 "범위 토큰"을 사용하여 잠금이 생성됩니다. 이는 정상적인 상황에서 잠금 보유자만 잠금을 해제할 수 있도록 보장합니다. 🎜🎜Cache::lock()->get(Closure) 메서드를 사용하여 잠금을 사용하는 경우에는 변경할 필요가 없습니다. 🎜
$value = DB::table('users')->value('options->language');
dump($value);
// Laravel 5.7...
'"en"'
// Laravel 5.8...
'en'
🎜그러나 수동으로 호출하려는 경우에는 Cache::lock()->release() , 잠금 인스턴스를 유지하려면 코드를 업데이트해야 합니다. 그런 다음 작업을 완료한 후 동일한 잠금 인스턴스에서 release 메서드를 호출할 수 있습니다. 예: 🎜
// Laravel 5.7...
App\Feedback.php -> feedback (正确的复数形式)
App\UserFeedback.php -> user_feedbacks (错误的复数形式)
// Laravel 5.8
App\Feedback.php -> feedback (正确的复数形式)
App\UserFeedback.php -> user_feedback (正确的复数形式)

때때로 한 프로세스에서 잠금을 획득하고 다른 프로세스에서 해제하고 싶을 수도 있습니다. 예를 들어 웹 요청 중에 잠금을 획득하고 해당 요청에 의해 트리거된 대기 중인 작업이 종료되면 잠금을 해제하려고 할 수 있습니다. 이 경우 작업이 지정된 토큰으로 잠금을 다시 인스턴스화할 수 있도록 잠금 범위 "소유자 토큰"을 대기열에 있는 작업에 전달해야 합니다.

/**
 * 与模型关联的数据表名称。
 *
 * @var string
 */protected $table = 'user_feedbacks';

현재 소유자를 존중하지 않고 이 작업을 수행하려면 잠그면 다음 forceRelease 메소드를 사용할 수 있습니다: forceRelease 方法:

/**
 * 标识 ID 是否自增
 *
 * @var bool
 */public $incrementing = true;

RepositoryStore 契约

影响可能性:非常低

为了完全符合 PSR-16 的要求,IlluminateContractsCacheRepository 契约的 putforever 方法的返回值以及 IlluminateContractsCacheStore 契约的 put, putManyforever 方法 已更改 从 voidbool

集合

firstWhere  方法

影响可能性:非常低

firstWhere 方法参数 已更改 匹配 where 方法的签名。如果要重写此方法,则应更新方法的参数来匹配其父级:

protected $casts = ['deleted_at' => 'string'];

终端

Kernel 契约

影响可能性:非常低

terminate 方法 已经添加到 Illuminate/Contracts/Console/Kernel 契约中。如果你实现了这个接口,则应该将这个方法添加到实现类中。

容器

生成器 & 标记服务

影响可能性:中等

容器的 tagged 方法使用 PHP 生成器通过给定的标记惰性地实例化服务。由于这种改变,tagged 方法返回  iterable 类型,而不是 数组。如果你这个方法使用了类型提示的返回值,则应确保将类型提示也更改为 iterable 类型。

另外,不能再通过数组偏移值直接访问标记服务 ,比如 $container->tagged('foo')[0]

resolve 方法

影响可能性:非常低

resolve 方法 接收一个新布尔参数,该参数指示事件在对象实例化期间是否应触发 / 执行(解析回调)。如果你重写了这个方法,你必须更新方法签名以匹配父方法。

addContextualBinding 方法

影响可能性:非常低

IlluminateContractsContainerContainer 契约增加了 addContextualBinding

/**
 * 将给定的 Http 异常转换为 Http 响应。
 *
 * @参数 \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface  $e
 * @返回 \Symfony\Component\HttpFoundation\Response
 */protected function renderHttpException(HttpExceptionInterface $e);

RepositoryStore Contract

잠재적 영향 : 매우 낮음🎜🎜 PSR-16의 요구 사항을 완전히 준수하기 위해 IlluminateContractsCacheRepository 계약의 putforever 메소드와 IlluminateContractsCacheStoreput, putManyforever 메소드의 반환 값 > 계약이 void에서 bool로 변경되었습니다. 🎜

수집

firstWhere 방법

🎜영향 가능성: 매우 낮음🎜🎜firstWhere 방법 where 메소드의 서명과 일치하도록 매개변수가 변경되었습니다. 이 메서드를 재정의하려면 상위 메서드와 일치하도록 메서드의 매개변수를 업데이트해야 합니다. 🎜
'employee' => [    'name' => 'Taylor Otwell',],/**
    * 转换给定的值.
    *
    * @param  string  $key
    * @param  mixed  $value
    * @return mixed
    */protected function transform($key, $value){    dump($key); // 'employee.name' (Laravel 5.8)    dump($key); // 'name' (Laravel 5.7)}

터미널

커널 계약

🎜효과 가능성: 매우 낮음🎜🎜terminate 메소드가 Illuminate/Contracts/Console/Kernel 계약에 추가되었습니다. 이 인터페이스를 구현하는 경우 구현 클래스에 이 메서드를 추가해야 합니다. 🎜

컨테이너

생성기 및 태그 서비스

🎜영향 가능성: 중간🎜🎜Container의 tagged 메소드는 PHP를 사용하여 생성됩니다. 공급자 지정된 태그를 사용하여 서비스를 지연 인스턴스화합니다. 이러한 변경으로 인해 tagged 메서드는 배열 대신 iterable 유형을 반환합니다. 메서드가 유형 힌트 반환 값을 사용하는 경우 유형 힌트도 반복 가능 유형으로 변경해야 합니다. 🎜🎜또한, $container->tagged('foo')[0]와 같은 배열 오프셋 값을 통해 더 이상 태그 서비스에 직접 접근할 수 없습니다. 🎜

resolve 방법

🎜잠재적 영향: 매우 낮음🎜🎜resolve 방법은 다음 여부를 나타내는 새로운 부울 매개변수를 받습니다. 이벤트는 객체 인스턴스화(해결 콜백) 중에 발생/실행되어야 합니다. 이 메서드를 재정의하는 경우 상위 메서드와 일치하도록 메서드 시그니처를 업데이트해야 합니다. 🎜

addContextualBinding 메서드

🎜영향 가능성: 매우 낮음🎜🎜IlluminateContractsContainerContainer 계약은 addContextualBinding을 추가합니다. 코드> 방법. 이 인터페이스를 구현하려면 구현에 이 메서드를 추가해야 합니다. 🎜

tagged 메서드 tagged 方法

影响可能性:低
tagged 方法现在 改为 返回 iterable 类型而不是 array 类型。如果你的代码参数有类型提示,找到所有 tagged 方法提示  array 类型的地方,将类型提示改为 iterable 类型。

flush 方法

影响可能性:非常低

IlluminateContractsContainerContainer 契约增加了 flush 方法。如果要实现此接口,则应将此方法加到你的实现中。

数据库

未被引号包围的 MySQL JSON 值

影响可能性:低

在使用 MySQL 和 MariaDB 的时候,Query 构造器返回的 JSON 值将不会使用引号包围。其他数据库将和这里的行为保持一致:

protected function setUp(): voidprotected function tearDown(): void

因此,不再支持或不再需要 ->> 操作符了。

SQLite

影响可能性:中等

从 Laravel 5.8 开始, 最早版本 SQLite 支持 一直到 SQLite 3.7.11。如果你使用的是更早之前的 SQLite 版本,你应该升级 (推荐升级到 SQLite 3.8.8+)。

Eloquent

模型命名中的不规则复数结尾

影响可能性:中等

从 Laravel 5.8 起,含有不规则复数形式结尾的复合名称模型命名 现在可以正确的进行复数化.

/**
 * 获取已验证的属性和值。
 *
 * @return array
 */public function validated();

如果你的模型名称没有正确的使用复数名称,你在模型中定义 $table 属性之后还是可以继续使用它的:

composer require laravel/nexmo-notification-channel
composer require laravel/slack-notification-channel

带有递增 ID 的自定义中继模型

如果你用一个自定义的中继模型定义了多对多的关系,而且这个中继模型拥有一个自增的主键,你应当确保这个自定义中继模型类中定义了一个 incrementing 属性其值为 true

rrreee

loadCount 方法

影响可能性:低

基础类 IlluminateDatabaseEloquentModel 中添加了 loadCount 方法。如果你的应用中也定义了 loadCount 方法,可能会和 Eloquent 中的相冲突。

originalIsEquivalent 方法

影响可能性:非常低

IlluminateDatabaseEloquentConcernsHasAttributes trait 中的 originalIsEquivalent 成员方法从 protected  改变为 public

deleted_at

영향 가능성: 낮음
tagged 메서드는 이제 배열< 대신 iterable 유형을 반환합니다. /코드>를 입력하세요. 코드 매개변수에 유형 힌트가 있는 경우 array 유형의 tagged 메서드 힌트를 모두 찾아 유형 힌트를 iterable 유형으로 변경하세요.

flush 메서드 🎜🎜🎜영향 가능성: 매우 낮음🎜🎜🎜IlluminateContractsContainerContainer 계약은 flush 메서드를 추가합니다. 이 인터페이스를 구현하려면 구현에 이 메서드를 추가해야 합니다. 🎜

데이터베이스

🎜MySQL JSON 값은 ​​따옴표로 묶이지 않습니다🎜🎜🎜영향 가능성: 낮음🎜🎜🎜MySQL 및 MariaDB를 사용할 때 쿼리 생성자가 반환한 JSON 값은 따옴표로 묶이지 않습니다. . 다른 데이터베이스는 다음과 같이 일관되게 작동합니다. 🎜rrreee🎜 따라서 ->> 연산자는 더 이상 지원되거나 필요하지 않습니다. 🎜🎜SQLite🎜🎜🎜영향 가능성: 보통 🎜🎜🎜 Laravel 5.8부터 SQLite의 초기 버전은 SQLite 3.7.11까지 지원됩니다. 이전 버전의 SQLite를 사용하는 경우 업그레이드해야 합니다(SQLite 3.8.8+로 업그레이드하는 것이 좋습니다). 🎜

Eloquent

🎜모델 이름 지정 시 불규칙 복수형 어미🎜🎜🎜영향 가능성: 보통🎜🎜🎜Laravel 5.8부터 불규칙 복수형 어미가 있는 복합 이름의 모델 이름 지정이 이제 올바르게 복수화가 작동합니다.🎜rrreee🎜 모델 이름이 복수형 이름을 올바르게 사용하지 않으면 모델에서 $table 속성을 ​​정의한 후 계속 사용할 수 있습니다. 🎜rrreee🎜증가하는 ID로 자동 릴레이 모델 정의🎜🎜 사용자 정의 릴레이 모델과 다대다 관계가 있고 릴레이 모델에 자동 증가 기본 키가 있는 경우 사용자 정의 릴레이 모델 클래스가 값이 incrementing 속성을 ​​정의하는지 확인해야 합니다. >true: 🎜rrreee🎜loadCount 메서드 🎜🎜🎜영향 가능성: 낮음 🎜🎜🎜Base 클래스 IlluminateDatabaseEloquentModel loadCount 메서드를 추가했습니다. >. 애플리케이션이 loadCount 메소드도 정의하는 경우 Eloquent의 메소드와 충돌할 수 있습니다. 🎜🎜originalIsEquivalent 메서드 🎜🎜🎜영향 가능성: 매우 낮음 🎜🎜🎜IlluminateDatabaseEloquentConcernsHasAttributes IlluminateDatabaseEloquentConcernsHasAttributes 특성의 멤버 메서드가 protected에서 제거되었습니다. 공개로 변경되었습니다. 🎜🎜deleted_at 속성의 자동 소프트 삭제 변환🎜🎜🎜잠재적 영향: 낮음🎜🎜

Eloquent 모델이 IlluminateDatabaseEloquentSoftDeletes 특성을 사용할 때 deleted_at 멤버 속성은 이제 자동으로 Carbon 인스턴스로 변환됩니다. 멤버 속성에 대한 사용자 정의 접근자를 작성하거나 이를 casts 속성에 수동으로 추가하여 이 동작을 재정의할 수 있습니다: IlluminateDatabaseEloquentSoftDeletes trait 时 deleted_at 成员属性 现将会自动转换 成为一个 Carbon 实例。你可以重写这个行为,通过为该成员属性编写你的自定义 accessor 或者手动将它添加到 casts 属性中:

rrreee

BelongsTogetForeignKey 方法

影响可能性:低

BelongsTo 关联关系中的 getForeignKeygetQualifiedForeignKey 方法已分别重命名为 getForeignKeyNamegetQualifiedForeignKeyName,使得方法名和在 Laravel 提供的其他关联关系中保持一致。

事件

fire 方法

影响可能性:低

Illuminate/Events/Dispatcher 类中的 fire 方法 (在 Larevel 5.4 中不赞成使用)  已经被 移除 了。
你应当使用它的替代方法 dispatch

异常处理器

ExceptionHandler 契约

影响可能性:低

IlluminateContractsDebugExceptionHandler 契约中新增了 shouldReport 方法。 现在当你实现异常处理器的接口时,你需要同时实现此方法。

renderHttpException 方法

影响可能性:低

IlluminateFoundationExceptionsHandler 类中 renderHttpException 方法的签名 有改动 。现在如果你在异常处理器中重写此方法,应当修改方法的签名以和其父类保持一致:

rrreee

Facades

Facade 服务解析

影响可能性:低

getFacadeAccessor 方法现在可以 只返回代表服务容器标识的字符串 ,之前该方法会返回一个对象实例。

邮件

Markdown 文件路径更改

影响可能性:高

如果你已经使用 vendor:publish 命令发布了 Laravel 的 Markdown 邮件组件,你需要将 /resources/views/vendor/mail/markdown 路径重命名为 text

并且 markdownComponentPaths 方法 已被重命名 为 textComponentPaths 。如果你要重写这个方法,你应该更新方法名,使之与其父类一致。

PendingMailrrreee

BelongsTo's code>getForeignKey 메서드

영향 가능성: 낮음

🎜BelongsTo 관계의 getForeignKeygetQualifiedForeignKey 메서드 이름이 getForeignKeyName
getQualifiedForeignKeyName은 각각 메소드 이름이 Laravel에서 제공하는 다른 관계와 일치하도록 합니다.
🎜

이벤트

fire 메서드 🎜🎜🎜충격 확률: 낮음🎜🎜🎜Illuminate/Events/Dispatcher 클래스 < code>fire 메소드(Larevel 5.4에서는 더 이상 사용되지 않음)가 제거되었습니다.
대체 dispatch 를 사용해야 합니다. 🎜

예외 처리기

ExceptionHandler 계약 🎜🎜🎜잠재적 영향: 낮음🎜🎜🎜IlluminateContractsDebugExceptionHandler 계약에 새로운 가 추가됨 shouldReport< /코드> 메소드. 이제 예외 처리기 인터페이스를 구현할 때 이 메서드도 구현해야 합니다. 🎜

renderHttpException 메서드 🎜🎜🎜영향 가능성: 낮음🎜🎜🎜IlluminateFoundationExceptionsHandler renderHttpException 메서드 서명 IlluminateFoundationExceptionsHandler 클래스가 변경되었습니다. 이제 예외 처리기에서 이 메서드를 재정의하는 경우 상위 클래스와 일관되도록 메서드의 시그니처를 수정해야 합니다. 🎜rrreee

Facades

Facade 서비스 해결 🎜🎜🎜잠재적 영향: 낮음 🎜🎜🎜이제 getFacadeAccessor 메소드는 객체 인스턴스를 반환하는 대신 서비스 컨테이너 ID를 나타내는 문자열만 반환할 수 있습니다. 🎜

메일

마크다운 파일 경로 변경

🎜🎜영향 가능성: 높음🎜🎜🎜vendor:publish를 사용하여 게시한 경우 명령 Laravel의 Markdown 메일 구성 요소를 사용하려면 /resources/views/vendor/mail/markdown 경로의 이름을 text로 바꿔야 합니다. 🎜🎜그리고 markdownComponentPaths 메서드의 이름이 textComponentPaths로 변경되었습니다. 이 메서드를 재정의하는 경우 상위 클래스와 일치하도록 메서드 이름을 업데이트해야 합니다. 🎜

PendingMail 클래스 메소드 매개변수 변경🎜🎜🎜영향 가능성: 매우 낮음🎜🎜IlluminateMailPendingMail

send, sendNow, queue, later 클래스 >fill 메소드가 IlluminateMailMailable 인스턴스 대신 IlluminateContractsMailMailable 인스턴스를 매개변수로 허용하도록 변경되었습니다. 메서드를 재정의하려면 해당 매개 변수를 상위 클래스와 일치하도록 업데이트해야 합니다. IlluminateMailPendingMail 类中的 sendsendNowqueuelaterfill 方法 已被更改 为需接收一个 IlluminateContractsMailMailable 实例作为参数,而不是 IlluminateMailMailable 实例。如果你要重写其中的方法,你需要更新其形参,和其父类保持一致。

队列

Pheanstalk 4.0

影响可能性:中

Laravel 5.8 提供了支持 ~4.0 发布版本的 Pheanstalk 队列。如果你正在应用中使用 Pheanstalk 库,请通过 Composer 升级你的库到 ~4.0 发布版本。

Job 契约

影响可能性:非常低

isReleasedhasFailedmarkAsFailed 方法 已被加入到 IlluminateContractsQueueJob 契约中 。如果你正在实现这个 interface ,你应该添加这些方法到你的实现代码中。

Job::failed & FailingJob

影响可能性:非常低

在 Laravel 5.7 中,当一个队列任务失败后,队列 worker 将执行 FailingJob::handle 方法。在 Laravel 5.8 中,FailingJob 类中的逻辑已被迁移到了 fail 方法中,该方法就定义在这个任务类中。正因如此, fail 方法被纳入了 IlluminateContractsQueueJob 契约。

IlluminateQueueJobsJob 基类包含了 fail 的实现,在常规的应用里不需要改任何代码。然而,如果你正在搭建自定义的队列驱动,起了一个任务类,该任务类 没有 继承由 Laravel 提供的任务基类,你应该在你自定义的任务类中手动实现 fail 方法。作为实现的参考,你可以查阅 Laravel 的任务基类。

这个改变允许定制队列驱动,从而在对任务删除过程获得更多的控制。

Redis Blocking Pop

影响可能性:非常低

现在使用 Redis 队列驱动的 「blocking pop」特性是安全的。在之前,如果 Redis 服务或者 worker 掉线的同时取出任务,可能造成队列中的任务丢失(小概率事件)。 为了让 blocking pops 变得安全,将给每一个 Laravel 队列创建一个新的带有 :notify 后缀的 Redis list 。

请求

TransformsRequest 中间件

影响可能性:低

现在,当请求输入是一个数组时,  IlluminateFoundationHttpMiddlewareTransformsRequest 中间件的 transform 方法将接收到「全限定」 请求输入的 key :

rrreee

路由

UrlGenerator

Pheanstalk 4.0

영향 가능성: 중간

🎜Laravel 5.8은 ~4.0 릴리스 버전을 지원하는 Pheanstalk 대기열을 제공합니다. 애플리케이션에서 Pheanstalk 라이브러리를 사용하는 경우 Composer를 통해 라이브러리를 ~4.0 릴리스 버전으로 업그레이드하세요. 🎜

작업 계약 🎜🎜🎜영향 가능성: 매우 낮음🎜🎜🎜isReleased, hasFailedmarkAsFailed IlluminateContractsQueueJob 계약에 메서드가 추가되었습니다. 이 인터페이스를 구현하는 경우 구현 코드에 이러한 메서드를 추가해야 합니다. 🎜

Job::failedFailingJob 클래스 🎜🎜🎜영향 가능성: 매우 낮음🎜🎜🎜Laravel 5.7에서는 대기열 작업이 실패하면 대기열 작업자는 FailingJob::handle 메서드를 실행합니다. Laravel 5.8에서는 FailingJob 클래스의 로직이 이 작업 클래스에 정의된 fail 메서드로 마이그레이션되었습니다. 이로 인해 fail 메소드가 IlluminateContractsQueueJob 계약에 포함됩니다. 🎜🎜IlluminateQueueJobsJob 기본 클래스에는 fail 구현이 포함되어 있으며 일반 애플리케이션에서는 코드를 변경할 필요가 없습니다. 그러나 사용자 정의 큐 드라이버를 구축하고 Laravel에서 제공하는 작업 기본 클래스를 상속하지 않는 작업 클래스를 생성하는 경우 사용자 정의 작업 클래스에서 fail<을 수동으로 구현해야 합니다. 구현에 대한 참고 자료로 Laravel의 작업 기반 클래스를 확인할 수 있습니다. 🎜🎜이 변경을 통해 대기열 드라이버를 사용자 정의하면 작업 삭제 프로세스를 더 효과적으로 제어할 수 있습니다. 🎜

Redis Blocking Pop🎜🎜🎜영향 가능성: 매우 낮음🎜🎜🎜이제 Redis 큐 드라이버의 "blocking pop" 기능을 사용해도 안전합니다. 이전에는 Redis 서비스 또는 작업자의 연결이 끊어지고 작업이 동시에 제거되면 대기열의 작업이 손실될 수 있었습니다(작은 확률 이벤트). 차단 팝업을 안전하게 만들기 위해 각 Laravel 대기열에 대해 :notify 접미사가 붙은 새로운 Redis 목록이 생성됩니다. 🎜

요청

TransformsRequest 미들웨어 🎜🎜🎜영향 가능성: 낮음 🎜🎜🎜이제 요청 입력이 배열인 경우 IlluminateFoundationHttpMiddlewareTransformsRequest 미들웨어의 transform 메소드는 "정규화된" 요청 입력 키를 수신합니다: 🎜rrreee

Route

UrlGenerator 프로토콜🎜🎜🎜 영향: 매우 낮음🎜🎜

이전 메서드가 IlluminateContractsRoutingUrlGenerator 계약에 추가되었습니다. 이 인터페이스를 호출하려면 구현에 이 메서드를 추가해야 합니다. previous 方法 已经添加到 IlluminateContractsRoutingUrlGenerator contract 中。如果要调用这个接口,你应该将这个方法添加到你的实现中。

Illuminate/Routing/UrlGenerator 中的  cachedSchema 特性

影响可能性:非常低

Illuminate/Routing/UrlGenerator 中的 $cachedSchema 属性 (在 Laravel 5.7 中已被弃用) 已更改为 $cachedScheme

Sessions

StartSession 中间件

影响可能性:非常低

Session 的持久性逻辑已 从 terminate() 方法移动到 handle() 方法。 如果你要重写其中的方法, 则应该更新它们以反映这些更改。

Support

优先使用字符串和数组类而不是辅助函数

影响可能性:中等

所有的 array_* and str_* 全局辅助函数 都被废弃。你需要直接使用 IlluminateSupportArrIlluminateSupportStr 提供的方法。

这个调整的影响被标记为中等,因为这些辅助函数被转移到新的 laravel/helpers 扩展包中,以便更好地向后兼容。

延迟的服务提供者

影响可能性:中等

服务提供程序的用于指示是否延迟提供程序的 defer 布尔属性已经被废弃。现在如果要将服务提供者标记为延迟的需要通过实现 IlluminateContractsSupportDeferrableProvider 契约来完成。

测试

PHPUnit 8

影响可能性:可选

默认情况下, Laravel 5.8 使用 PHPUnit 7.。不过, 你可以升级到 PHPUnit 8,但是这需要 PHP >= 7.2。更多细节请阅读 PHPUnit 8 版本声明。

setUptearDown 方法现在要求返回 void 类型:

rrreee

验证

Validator 契约

影响可能性:非常低

IlluminateContractsValidationValidator 中 新增了 validated 方法:

rrreee

如果你调用了这个接口,需要添加此方法的实现。

ValidatesAttributes 特性

影响可能性:非常低

IlluminateValidationConcernsValidatesAttributes 特性中的 parseTablegetQueryColumnrequireParameterCount 方法可见性从 protected 调整为了 public

DatabasePresenceVerifier

影响可能性:非常低

IlluminateValidationDatabasePresenceVerifier 类的 table 方法可见性从 protected 调整为了 public

cachedSchema Illuminate/Routing/UrlGenerator의 기능

잠재적 영향: 매우 낮음🎜🎜 < Illuminate/Routing/UrlGenerator(Laravel 5.7에서는 더 이상 사용되지 않음)의 code>$cachedSchema
속성이 $cachedScheme으로 변경되었습니다. 🎜

세션

StartSession 미들웨어

🎜잠재적 영향: 매우 낮음🎜🎜Session의 지속성 논리가 < 코드에서 변경되었습니다. >terminate()
메서드가 handle() 메서드로 이동되었습니다. 그 안에 있는 메서드를 재정의하는 경우 변경 사항을 반영하도록 업데이트해야 합니다. 🎜

지원

도우미 함수보다 문자열 및 배열 클래스 선호

🎜잠재적 영향: 중간🎜🎜모두 array_*< /code> 및 < code>str_* 전역 도우미 함수는 더 이상 사용되지 않습니다. IlluminateSupportArrIlluminateSupportStr에서 제공하는 메서드를 직접 사용해야 합니다. 🎜🎜이 조정의 영향은 더 나은 이전 버전과의 호환성을 위해 이러한 도우미 기능이 새로운 laravel/helpers 확장 패키지로 이동되었기 때문에 중간으로 표시됩니다. 🎜

지연된 서비스 제공자

🎜영향 가능성: 중간🎜🎜제공자를 연기할지 여부를 나타내는 서비스 제공자의 defer 부울 속성은 이미 포기되었습니다. 이제 IlluminateContractsSupportDeferrableProvider 계약을 구현하여 서비스 제공자를 지연된 것으로 표시해야 합니다. 🎜

테스트

PHPUnit 8

🎜영향 가능성: 선택 사항🎜🎜기본적으로 Laravel 5.8은 PHPUnit 7을 사용합니다. 그러나 PHPUnit 8로 업그레이드할 수 있지만 이를 위해서는 PHP >= 7.2가 필요합니다. 자세한 내용은 PHPUnit 8 릴리스 발표를 읽어보세요. 🎜🎜setUptearDown 메소드에는 이제 반환 유형 void가 필요합니다: 🎜rrreee

Validation

Validator Contract< /code> h4>🎜영향 가능성: 매우 낮음🎜🎜IlluminateContractsValidationValidator validated 메서드 추가: 🎜rrreee🎜이 인터페이스를 호출하면 이 메서드의 구현을 추가해야 합니다. 🎜

ValidatesAttributes 속성

🎜잠재적 영향: 매우 낮음🎜🎜IlluminateValidationConcernsValidatesAttributes parseTable 속성 코드>, getQueryColumnrequireParameterCount 메서드의 protected에서 public으로 조정되었습니다. 🎜

DatabasePresenceVerifier 클래스

🎜잠재적 영향: 매우 낮음🎜🎜IlluminateValidationDatabasePresenceVerifier 클래스의 테이블 메서드 공개 상태가 보호됨에서 공개로 조정되었습니다. 🎜

Validator 클래스

잠재적 영향: 매우 낮음Validator

影响可能性:非常低

IlluminateValidationValidator 类的 getPresenceVerifierFor 方法可见性从 protected 调整为了 public

邮箱验证

影响可能性:非常低

邮箱验证规则现在回检测邮箱地址是否兼容 RFC5630, 使验证逻辑和 SwiftMailer 保持一致。在 Laravel 5.7, email 规则只验证邮箱地址是否兼容 RFC822。

因此 当使用 Laravel 5.8 时,之前认为无效的邮箱地址现在将被视为有效,如 (e.g hej@bär.se)。 通常,这被看做一个 bug 修复; 不过, 我们还是将其列到这里给你一个提醒。如果您遇到有关此更改的任何问题,请通知我们。

视图

getData 方法

影响可能性:非常低

IlluminateContractsViewView 契约中新增了 getData 方法。如果你调用了这个接口, 则需要添加该方法的实现。

通知

Nexmo / Slack 通知频道

影响可能性:高

Nexmo 和 Slack 通知频道已经被提前到官方扩展中。要在自己的应用中使用这些频道,需要安装以下扩展包:

rrreee

其他

我们还鼓励你查看 laravel/laravel

IlluminateValidationValidator 클래스의 getPresenceVerifierFor 메소드 가시성이 보호에서 공개로 조정됩니다.

이메일 확인

영향 가능성: 매우 낮음

이제 이메일 확인 규칙은 이메일 주소가 RFC5630과 호환되는지 확인하여 확인 논리가 SwiftMailer와 일치하도록 합니다. Laravel 5.7에서 email 규칙은 이메일 주소가 RFC822를 준수하는지 확인합니다.

따라서 Laravel 5.8을 사용하면 이전에 유효하지 않은 것으로 간주되었던 이메일 주소가 이제 유효한 것으로 간주됩니다(예: hej@bär.se). 일반적으로 이는 버그 수정으로 간주되지만 여기에는 알림으로 포함됩니다. 이번 변경과 관련하여 문제가 발생하면 알려주시기 바랍니다.

View

getData 메소드

영향 가능성: 매우 낮음🎜

IlluminateContractsViewView 계약에 새로 추가됨< 코드>getData 메소드. 이 인터페이스를 호출하는 경우 이 메서드의 구현을 추가해야 합니다. 🎜

알림

🎜Nexmo/Slack 알림 채널

잠재적 영향: 높음🎜

Nexmo 및 Slack 알림 채널이 공식 확장 프로그램에 추가되었습니다. . 자신의 애플리케이션에서 이러한 채널을 사용하려면 다음 확장을 설치해야 합니다. 🎜rrreee

기타

또한 laravel/laravel 코드 저장소. 이러한 업데이트 중 다수는 필수는 아니지만 애플리케이션의 이러한 파일을 코드 리포지토리와 동기화된 상태로 유지할 수 있습니다. 이러한 업데이트 중 일부는 이미 이 업그레이드 가이드에 언급되어 있지만 나열되지 않은 기타 사소한 업데이트(예: 구성 파일 또는 주석 변경)도 많이 있습니다. GitHub 비교 도구를 통해 어떤 업데이트가 더 중요한지 확인할 수 있습니다. 🎜🎜이 글은 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜