Arahan naik taraf


Panduan Naik Taraf

    dari 5.7 Naik taraf kepada 5.8.0
Perubahan kesan tinggi

    Cache TTL dalam beberapa saat
  • Peningkatan keselamatan untuk kunci cache
  • Perubahan laluan fail markdown
  • Perubahan pemberitahuan Nexmo
Perubahan pemberitahuan Sederhana

    Perkhidmatan pembina dan teg kontena
  • Kekangan versi SQLite
  • Ganti Pembantu dengan kelas pada rentetan dan tatasusunan
  • Pembekal perkhidmatan Tertunda yang ditamatkan
  • Mematuhi spesifikasi model PSR-16 yang telah dipertingkatkan🜜 irregular irregular
  • Meja perantaraan tersuai model menambah atribut id kenaikan automatik
  • Sokong perpustakaan Pheanstalk 4.0
  • Mengemas kini daripada Laravel 5.7 kepada 5.8

    Anggaran masa naik taraf: 1 jam

    Nota: Kami cuba mendokumentasikan setiap kemungkinan perubahan. Oleh kerana kebanyakan perubahan pecah adalah dalaman kepada rangka kerja, hanya subset perubahan ini boleh menjejaskan aplikasi anda.

    Kemas kini dependencies

    Dalam composer.json, kemas kini kebergantungan laravel/framework kepada 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

    Seterusnya, semak sama ada pakej pihak ketiga yang dipasang dalam aplikasi menyokong Laravel 5.8 dan semak sama ada versi yang dipasang adalah betul.

    Kontrak Permohonan

    kaedahpersekitaran

    Kemungkinan impak: sangat rendah

    Terang/Kontrak/Asasi/Aplikasi Kelas persekitaran Tandatangan kaedah telah diubah suai. Jika kaedah ini ditindih dalam aplikasi anda, anda harus mengemas kini tandatangan kaedah ini:

    // 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));

    Kaedah yang baru ditambah

    Kebarangkalian kesan: Sangat rendah

    🎜🎜Kaedah yang baru ditambah berikut bootstrapPath, < kod>configPath, databasePath, environmentPath, resourcePath, storagePath, resolveProvider, bootstrapWith, configurationIsCached, detectEnvironment, environmentFile, environmentFilePath, getCachedConfigPath, getCachedRoutesPath, getLocale, getNamespace, getProviders, hasBeenBootstrapped, loadDeferredProviders, loadEnvironmentFrom, routesAreCached, setLocale, shouldSkipMiddleware , tamatkan akan ditambahkan pada Illuminate/Contracts/Foundation/Application 🎜🎜Jika anda melaksanakan antara muka ini, anda harus menambahkan kaedah ini pada kelas pelaksanaan. 🎜🎜Pengesahan🎜🎜Tetapkan Semula Parameter Laluan Pemberitahuan Kata Laluan 🎜🎜🎜Kemungkinan Kesan: Rendah 🎜🎜🎜Apabila pengguna mengklik pautan tetapan semula kata laluan, Laravel menggunakan pembantu laluan untuk menjana pautan ke URL < code>password.reset bernama laluan, apabila menggunakan Laravel 5.7, token akan dihantar ke pembantu route tanpa nama yang jelas, seperti: 🎜
    Cache::lock('foo', 10)->get(function () {    // 锁将会被安全的自动释放});
    🎜Apabila anda menggunakan In Laravel 5.8, token dihantar sebagai parameter eksplisit kepada pembantu route: 🎜
    if (($lock = Cache::lock('foo', 10))->get()) {    // 执行任务…    $lock->release();}
    🎜 Oleh itu, jika anda ingin menentukan laluan password.reset anda sendiri, urinya mesti Ke sertakan parameter token. 🎜🎜Perubahan panjang kata laluan lalai🎜🎜🎜Potensi impak: Rendah 🎜🎜🎜Panjang kata laluan yang diperlukan semasa memilih atau menetapkan semula kata laluan ditukar kepada sekurang-kurangnya lapan aksara. 🎜🎜Cache🎜🎜TTL dalam beberapa saat🎜🎜🎜Potensi Impak: Sangat Tinggi🎜🎜

    Untuk membolehkan masa tamat tempoh yang lebih berbutir semasa menyimpan data, jangka hayat data cache ditukar daripada minit kepada saat. let , putMany , add , ingat untuk kelas IlluminateCacheRepository dan kelas sambungannya Kemas kini ini dilengkapkan dengan kaedah setDefaultCacheTime dan kaedah let semua memori cache. Sila lihat PR berkaitan untuk butiran. 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

    Jika anda menghantar integer kepada mana-mana kaedah ini, sila kemas kini kod anda untuk memastikan data yang disimpan dalam cache dihantar dalam beberapa saat. Selain itu, anda boleh menghantar contoh DateTime untuk menunjukkan apabila data tamat tempoh: 🎜
    /**
     * 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} Perubahan ini menjadikan sistem cache Laravel mematuhi sepenuhnya piawaian perpustakaan cache PSR-16. 🎜

    Patuhi PSR-16

    🎜Kemungkinan kesan: Sederhana🎜🎜Selain perubahan dalam nilai pulangan di atas, peningkatan ini juga mengemas kini Parameter TTL IlluminateCacheRepository untuk kaedah put, putMany dan add dalam kelas untuk menjadikannya lebih mematuhi PSR-16 spesifikasi. Ciri baharu menyediakan null lalai, jadi jika tiada nilai TTL dinyatakan, cache akan disimpan secara kekal dan tidak akan tamat tempoh. Selain itu, entri cache akan dikosongkan jika TTL mereka adalah 0 atau kurang. Lihat PR berkaitan untuk maklumat lanjut. 🎜🎜Acara KeyWritten juga telah dikemas kini berdasarkan perubahan ini. 🎜

    Peningkatan keselamatan kunci

    🎜Kemungkinan impak: Tinggi🎜🎜Dalam Laravel 5.7 dan versi terdahulu Laravel, ciri "kunci atom" yang disediakan oleh sesetengah pemacu cache, Kunci mungkin dilepaskan lebih awal kerana beberapa tingkah laku yang tidak dijangka. 🎜🎜Contohnya: Pelanggan A memperoleh kunci foo yang tamat tempoh dalam masa 10 saat. Klien A sebenarnya mengambil masa 20 saat untuk menyelesaikan tugasnya. Semasa pelaksanaan tugas Pelanggan A, kunci dilepaskan secara automatik oleh sistem cache. Selepas itu Klien B memperoleh kunci foo. Akhirnya Klien A menyelesaikan tugasnya dan melepaskan kunci foo, tetapi secara tidak sengaja melepaskan kunci yang dipegang oleh Klien B. Pada masa ini Klien C boleh mendapatkan kunci itu semula. 🎜🎜Untuk meredakan keadaan ini, kunci kini dijana menggunakan "token skop" terbenam, yang memastikan bahawa dalam keadaan biasa, hanya pemegang kunci boleh melepaskan kunci. 🎜🎜Jika anda menggunakan kunci menggunakan kaedah Cache::lock()->get(Closure), tiada perubahan diperlukan: 🎜
    $value = DB::table('users')->value('options->language');
    dump($value);
    // Laravel 5.7...
    '"en"'
    // Laravel 5.8...
    'en'
    🎜 Walau bagaimanapun, jika anda ingin memanggilnya secara manual, Cache::lock()->release() , anda mesti mengemas kini kod untuk mengekalkan contoh kunci. Kemudian, selepas menyelesaikan tugas, kaedah release boleh dipanggil pada contoh kunci yang sama. Contohnya: 🎜
    // Laravel 5.7...
    App\Feedback.php -> feedback (正确的复数形式)
    App\UserFeedback.php -> user_feedbacks (错误的复数形式)
    // Laravel 5.8
    App\Feedback.php -> feedback (正确的复数形式)
    App\UserFeedback.php -> user_feedback (正确的复数形式)

    Kadangkala anda mungkin ingin memperoleh kunci dalam satu proses dan melepaskannya dalam proses lain. Sebagai contoh, anda boleh memperoleh kunci semasa permintaan web dan ingin melepaskan kunci apabila kerja beratur yang dicetuskan oleh permintaan itu tamat. Dalam kes ini, anda harus menyerahkan skop kunci "token pemilik" kepada kerja beratur supaya kerja itu boleh menghidupkan semula kunci dengan token yang diberikan:

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

    Jika anda ingin melakukan ini tanpa menghormati pemilik semasanya Untuk melepaskan kunci, anda boleh menggunakan kaedah forceRelease berikut: 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);

    Repositori dan Kontrak Store

    Potensi kesan : Sangat rendah🎜🎜Untuk mematuhi sepenuhnya keperluan PSR-16, kontrak IlluminateContractsCacheRepository put dan forever dan kaedah put, putMany dan forever bagi IlluminateContractsCacheStore kontrak telah ditukar Daripada void kepada bool. 🎜

    Kaedah

    firstWhere

    🎜Kemungkinan impak: sangat rendah🎜🎜 kaedahfirstWhere Parameter telah ditukar agar sepadan dengan tandatangan kaedah where. Jika anda ingin mengatasi kaedah ini, anda harus mengemas kini parameter kaedah agar sepadan dengan induknya: 🎜
    '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)}

    Terminal

    Kernel Kontrak

    🎜Kesan Kemungkinan: Sangat rendah🎜🎜Kaedah terminate telah ditambahkan pada kontrak Illuminate/Contracts/Console/Kernel. Jika anda melaksanakan antara muka ini, anda harus menambah kaedah ini pada kelas pelaksana. 🎜

    Bekas

    Perkhidmatan Penjana & Teg

    🎜Kemungkinan Kesan: Sederhana🎜🎜Kaedah teg kontena dijana menggunakan PHP Pembekal malas membuat instantiate perkhidmatan dengan tag yang diberikan. Disebabkan perubahan ini, kaedah tag mengembalikan jenis iterable dan bukannya array. Jika kaedah anda menggunakan nilai pulangan pembayang jenis, pastikan anda menukar pembayang jenis kepada jenis boleh diulang juga. 🎜🎜Selain itu, perkhidmatan tag tidak lagi boleh diakses secara langsung melalui nilai offset tatasusunan, seperti $container->tagged('foo')[0]. 🎜

    kaedahselesai

    🎜Impak yang berpotensi: sangat rendah🎜🎜 kaedahselesai menerima parameter boolean baharu yang Menunjukkan sama ada peristiwa harus menyala/melaksanakan semasa penyentakan objek (panggilan balik resolusi). Jika anda mengatasi kaedah ini, anda mesti mengemas kini tandatangan kaedah agar sepadan dengan kaedah induk. 🎜

    addContextualBinding kaedah

    🎜Kemungkinan kesan: Sangat rendah🎜🎜IlluminateContractsContainerContainer Kontrak menambah addContextualBinding kaedah. Jika anda ingin melaksanakan antara muka ini, anda harus menambah kaedah ini pada pelaksanaan anda. 🎜

    kaedah ditanda 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

    Kemungkinan kesan: Rendah
    kaedah kini mengembalikan jenis boleh lelar dan bukannya tatasusunan < /kod> taip. Jika parameter kod anda mempunyai petunjuk jenis, cari semua petunjuk kaedah tag jenis array dan tukar pembayang jenis kepada jenis iterable.

    kaedahflush 🎜🎜🎜Kemungkinan kesan: sangat rendah 🎜🎜🎜IlluminateContractsContainerContainer kontrak menambah kaedah flush. Jika anda ingin melaksanakan antara muka ini, anda harus menambah kaedah ini pada pelaksanaan anda. 🎜

    Pangkalan Data

    🎜Nilai MySQL JSON ​​tidak dikelilingi oleh petikan🎜🎜🎜Kemungkinan kesan: Rendah🎜🎜🎜Apabila menggunakan MySQL dan MariaDB, nilai JSON yang dikembalikan oleh pembina Pertanyaan tidak akan dikelilingi oleh petikan . Pangkalan data lain akan bertindak konsisten dengan ini: 🎜rrreee🎜 Oleh itu, pengendali ->> tidak lagi disokong atau diperlukan. 🎜🎜SQLite🎜🎜🎜Kemungkinan impak: Sederhana 🎜🎜🎜 Bermula dengan Laravel 5.8, versi terawal SQLite disokong sehingga SQLite 3.7.11. Jika anda menggunakan versi SQLite yang lebih awal, anda harus menaik taraf (ia adalah disyorkan untuk menaik taraf kepada SQLite 3.8.8+). 🎜

    Fasih

    🎜Tamat jamak tidak sekata dalam penamaan model🎜🎜🎜Kemungkinan impak: Sederhana🎜🎜🎜Setakat Laravel 5.8, penamaan model nama majmuk dengan pengakhiran jamak tidak sekata kini berfungsi dengan betul.🎜Jika Plurralisasi anda berfungsi dengan betul.🎜 nama model tidak menggunakan nama jamak dengan betul, anda masih boleh terus menggunakannya selepas mentakrifkan atribut $table dalam model: 🎜rrreee🎜Automatik dengan penambahan ID Define Relay Model🎜🎜Jika anda mentakrifkan perhubungan banyak-ke-banyak dengan model geganti tersuai, dan model geganti mempunyai kunci utama yang ditambah secara automatik, anda harus memastikan bahawa kelas model geganti tersuai mentakrifkan atribut incrementing yang nilainya ialah benar: 🎜rrreee🎜loadCount kaedah 🎜🎜🎜Kemungkinan kesan: rendah🎜🎜🎜Kelas asas IlluminateDatabaseEloquentModel Ditambah loadCount kaedah dalam . >. Jika aplikasi anda juga mentakrifkan kaedah loadCount, ia mungkin bercanggah dengan kaedah dalam Eloquent. 🎜🎜 kaedahoriginalIsEquivalent 🎜🎜🎜Potensi impak: Sangat rendah 🎜🎜🎜IlluminateDatabaseEloquentConcernsHasAttributes kaedah ahli dalam IlluminateContribunscode>IlluminateConcodeDatabase cted ditukar kepada public. 🎜🎜Penukaran pemadaman lembut automatik bagi atribut deleted_at🎜🎜🎜Kemungkinan kesan: rendah🎜🎜

    Apabila model Eloquent anda menggunakan ciri IlluminateDatabaseEloquentSoftDeletes, harta ahli deleted_at kini akan ditukar secara automatik kepada contoh Carbon. Anda boleh mengatasi tingkah laku ini dengan menulis pengakses tersuai anda untuk harta ahli atau menambahkannya secara manual pada atribut 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 kaedah

    Kemungkinan impak: Rendah

    🎜Milik Kaedah getForeignKey dan getQualifiedForeignKey dalam perhubungan telah dinamakan semula kepada getForeignKeyName dan getQualifiedForeignKeyName masing-masing untuk menjadikan nama kaedah konsisten dengan perhubungan lain yang disediakan oleh Laravel. Kaedah
    🎜

    Acara

    kebakaran 🎜🎜🎜Kebarangkalian impak: rendah🎜🎜🎜Terang/Acara/Penghantar kelas < kaedah code>fire (ditamatkan dalam Larevel 5.4) telah dialih keluar.
    Anda harus menggunakan penghantaran alternatifnya. 🎜

    Pengendali Pengecualian

    Pengendali Pengecualian kontrak 🎜🎜🎜Impak yang berpotensi: Rendah🎜🎜🎜IlluminateContractsDebugExceptionHandler baharu ditambahkan pada kontrak shouldReport< /kod> kaedah. Kini apabila anda melaksanakan antara muka pengendali pengecualian, anda perlu melaksanakan kaedah ini juga. 🎜

    kaedah renderHttpException 🎜🎜🎜Kemungkinan kesan: Rendah🎜🎜🎜IlluminateFoundationExceptionsHandler Tandatangan kaedah renderHttpException dalam Kelas IlluminateFoundationExceptionsHandler telah berubah. Sekarang jika anda mengatasi kaedah ini dalam pengendali pengecualian, anda harus mengubah suai tandatangan kaedah agar konsisten dengan kelas induknya: 🎜rrreee

    Fasad

    Resolusi perkhidmatan fasad 🎜🎜🎜Potensi impak: Rendah 🎜🎜🎜Kaedah getFacadeAccessor kini hanya boleh mengembalikan rentetan yang mewakili ID bekas perkhidmatan, bukannya mengembalikan tika objek. 🎜

    Mel

    Perubahan laluan fail markdown

    🎜🎜Kemungkinan kesan: Tinggi🎜🎜🎜Jika anda telah menerbitkan menggunakan vendor:publish arahan Untuk menggunakan komponen mel Markdown Laravel, anda perlu menamakan semula laluan /resources/views/vendor/mail/markdown kepada text. 🎜🎜Dan kaedah markdownComponentPaths telah dinamakan semula kepada textComponentPaths . Jika anda mengatasi kaedah ini, anda harus mengemas kini nama kaedah agar sepadan dengan kelas induknya. 🎜

    PendingMail parameter kaedah kelas berubah🎜🎜🎜Kemungkinan impak: sangat rendah🎜🎜

    hantar, hantar Sekarang, queue, nanti dan dalam IlluminateMailPendingMail kelas Kaedah >isi telah ditukar untuk menerima contoh IlluminateContractsMailMailable sebagai parameter dan bukannya contoh IlluminateMailMailable. Jika anda ingin mengatasi kaedah, anda perlu mengemas kini parameternya agar konsisten dengan kelas induknya. 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

    Queue

    Pheanstalk 4.0

    Potensi impak: Sederhana

    🎜Laravel 5.8 menyediakan baris gilir Pheanstalk yang menyokong versi keluaran ~4.0. Jika anda menggunakan pustaka Pheanstalk dalam aplikasi anda, sila tingkatkan pustaka anda kepada versi keluaran ~4.0 melalui Composer. 🎜

    Kerja kontrak 🎜🎜🎜Kemungkinan impak: sangat rendah🎜🎜🎜isReleased, hasFailed dan markAsFailed Kaedah telah ditambahkan pada kontrak IlluminateContractsQueueJob. Jika anda melaksanakan antara muka ini, anda harus menambahkan kaedah ini pada kod pelaksanaan anda. 🎜

    Job::failed & Failing Job kelas 🎜🎜🎜Kemungkinan kesan: sangat rendah🎜🎜🎜Dalam Laravel 5.7, apabila tugas baris gilir gagal, baris gilir pekerja akan melaksanakan kaedah FailingJob::handle. Dalam Laravel 5.8, logik dalam kelas FailingJob telah dipindahkan ke kaedah fail, yang ditakrifkan dalam kelas tugas ini. Oleh sebab itu, kaedah gagal disertakan dalam kontrak IlluminateContractsQueueJob. 🎜🎜IlluminateQueueJobsJob Kelas asas mengandungi pelaksanaan gagal dan tidak perlu menukar sebarang kod dalam aplikasi biasa. Walau bagaimanapun, jika anda membina pemacu baris gilir tersuai dan mencipta kelas tugas yang tidak mewarisi kelas asas tugas yang disediakan oleh Laravel, anda harus melaksanakan kaedah fail< secara manual dalam kelas tugas tersuai anda. Sebagai rujukan untuk pelaksanaan, anda boleh menyemak kelas asas tugas Laravel. 🎜🎜Perubahan ini membolehkan menyesuaikan pemandu baris gilir untuk mendapatkan lebih kawalan ke atas proses pemadaman tugas. 🎜

    Redis Blocking Pop🎜🎜🎜Kemungkinan impak: Sangat rendah🎜🎜🎜Kini selamat untuk menggunakan ciri "pop menyekat" pemandu gilir Redis. Sebelum ini, jika perkhidmatan atau pekerja Redis diputuskan sambungan dan tugasan dikeluarkan pada masa yang sama, tugasan dalam baris gilir mungkin hilang (peristiwa kebarangkalian kecil). Untuk memastikan pop sekatan selamat, senarai Redis baharu dengan akhiran :notify akan dibuat untuk setiap baris gilir Laravel. 🎜

    Permintaan

    TransformsRequest Middleware 🎜🎜🎜Kemungkinan Impak: Rendah 🎜🎜🎜Sekarang, apabila input permintaan ialah tatasusunan, IlluminateFoundationHttpMiddlewareTransformsRequestThesRequest Kaedah transform middleware akan menerima kunci input permintaan "layak sepenuhnya": 🎜rrreee

    Route

    UrlGenerator protokol🎜🎜🎜 Kemungkinan impak: Sangat rendah🎜🎜

    Kaedahsebelumnya telah ditambahkan pada kontrak IlluminateContractsRoutingUrlGenerator. Jika anda ingin memanggil antara muka ini, anda harus menambahkan kaedah ini pada pelaksanaan anda. 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 ciri dalam Illuminate/Routing/UrlGenerator

    Potensi kesan: sangat rendah🎜🎜 < sifat kod>$cachedSchema
    dalam Illuminate/Routing/UrlGenerator (ditamatkan dalam Laravel 5.7) telah ditukar kepada $cachedScheme. 🎜

    Sesi

    StartSession Middleware

    🎜Impak yang berpotensi: Sangat rendah🎜🎜Logik kegigihan sesi telah ditukar daripada< Kod kaedah >terminate() dialihkan ke kaedah handle(). Jika anda mengatasi kaedah di dalamnya, anda harus mengemas kininya untuk mencerminkan perubahan. 🎜

    Sokongan

    Lebih suka kelas rentetan dan tatasusunan berbanding fungsi pembantu

    🎜Impak yang berpotensi: Sederhana🎜🎜Semua array_*< /code> dan < code>str_* fungsi pembantu global tidak digunakan lagi. Anda perlu menggunakan kaedah yang disediakan oleh IlluminateSupportArr dan IlluminateSupportStr secara langsung. 🎜🎜Impak pelarasan ini ditandakan sebagai sederhana kerana fungsi pembantu ini dipindahkan ke pakej sambungan laravel/helpers baharu untuk keserasian ke belakang yang lebih baik. 🎜

    Pembekal Perkhidmatan Tertunda

    🎜Kemungkinan Kesan: Sederhana🎜🎜Harta boolean menunda pembekal perkhidmatan yang menunjukkan sama ada untuk menangguhkan pembekal Sudah ditinggalkan. Kini menandakan pembekal perkhidmatan sebagai tertunda perlu dilakukan dengan melaksanakan kontrak IlluminateContractsSupportDeferrableProvider. 🎜

    Ujian

    PHPUnit 8

    🎜Kemungkinan kesan: Pilihan🎜🎜Secara lalai, Laravel 5.8 menggunakan PHPUnit 7. Walau bagaimanapun, anda boleh menaik taraf kepada PHPUnit 8, tetapi ini memerlukan PHP >= 7.2. Sila baca pengumuman keluaran PHPUnit 8 untuk butiran lanjut. Kaedah 🎜🎜setUp dan tearDown kini memerlukan jenis pemulangan terbatal: 🎜rrreee

    Pengesahan

    Pengesah Kontrak< /code> h4>🎜Kemungkinan impak: sangat rendah🎜🎜IlluminateContractsValidationValidator Menambah kaedah disahkan: 🎜rrreee🎜Jika anda memanggil antara muka ini, An pelaksanaan kaedah ini perlu ditambah. 🎜

    ValidatesAttributes attribute

    🎜Potensi kesan: sangat rendah🎜🎜IlluminateValidationConcernsValidatesAttributes atribut dalam parseTable, kaedah getQueryColumn dan requireParameterCount telah dilaraskan daripada protected kepada public. 🎜

    DatabasePresenceVerifier kelas

    🎜Potensi impak: sangat rendah🎜🎜IlluminateValidationDatabasePresenceVerifier
    kelas jadual Kaedah keterlihatan dilaraskan daripada dilindungi kepada awam. 🎜

    Validator kelas

    Potensi impak: sangat rendahValidator

    影响可能性:非常低

    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 kelas getPresenceVerifierFor keterlihatan kaedah dilaraskan daripada dilindungi kepada awam.

    Pengesahan e-mel

    Kemungkinan kesan: sangat rendah

    Peraturan pengesahan e-mel kini semak sama ada alamat e-mel itu serasi dengan RFC5630, menjadikan logik pengesahan konsisten dengan SwiftMailer. Dalam Laravel 5.7, peraturan e-mel hanya mengesahkan bahawa alamat e-mel mematuhi RFC822.

    Jadi apabila menggunakan Laravel 5.8, alamat e-mel yang sebelum ini dianggap tidak sah kini akan dianggap sah, seperti (cth hej@bär.se). Biasanya, ini dianggap sebagai pembetulan pepijat, namun, kami memasukkannya di sini sebagai peringatan. Jika anda menghadapi sebarang masalah dengan perubahan ini, sila beritahu kami.

Lihat

getData kaedah

Kemungkinan kesan: sangat rendah🎜

Baru ditambah dalam kontrak IlluminateContractsViewView< kaedah code>getData. Jika anda memanggil antara muka ini, anda perlu menambah pelaksanaan kaedah ini. 🎜

Pemberitahuan

🎜Saluran Pemberitahuan Nexmo/Slack

Potensi Impak: Tinggi🎜

Saluran Pemberitahuan Nexmo dan Slack telah dibawa ke hadapan ke sambungan rasmi . Untuk menggunakan saluran ini dalam aplikasi anda sendiri, anda perlu memasang sambungan berikut: 🎜rrreee

Lain

Kami juga menggalakkan anda menyemak log perubahan laravel/laravel repositori kod. Walaupun kebanyakan kemas kini ini tidak diperlukan, anda boleh menyimpan fail ini dalam aplikasi anda selari dengan repositori kod. Beberapa kemas kini ini telah disebutkan dalam panduan peningkatan ini, tetapi terdapat banyak kemas kini kecil lain (seperti perubahan pada fail konfigurasi atau anotasi) yang tidak disenaraikan. Anda boleh melihat kemas kini mana yang lebih penting kepada anda melalui alat perbandingan GitHub. 🎜🎜Artikel ini pertama kali diterbitkan di laman web 🎜LearnKu.com🎜. 🎜🎜