Arahan naik taraf
- dari 5.7 Naik taraf kepada 5.8.0
- Cache TTL dalam beberapa saatPeningkatan keselamatan untuk kunci cachePerubahan laluan fail markdownPerubahan pemberitahuan Nexmo
- 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 automatikSokong 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 kebergantunganlaravel/framework
kepada5.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]);
因此,如果你要定义自己的
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 Permohonanpassword.reset
kaedah
persekitaran Kemungkinan impak: sangat rendah
Terang/Kontrak/Asasi/Aplikasi Kelaspersekitaran Tandatangan kaedah telah diubah suai. Jika kaedah ini ditindih dalam aplikasi anda, anda harus mengemas kini tandatangan kaedah ini:
Kaedah yang baru ditambah// 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));
Kebarangkalian kesan: Sangat rendah
🎜🎜Kaedah yang baru ditambah berikutbootstrapPath code>, < kod>configPath
,databasePath
,environmentPath
,resourcePath
,storagePath
,resolveProvider code>,
untuk menjana pautan ke URL < code>password.reset bernama laluan, apabila menggunakan Laravel 5.7, token akan dihantar ke pembantubootstrapWith
,configurationIsCached
,detectEnvironment
,environmentFile
,environmentFilePath
,getCachedConfigPath
,getCachedRoutesPath
,getLocale
,getNamespace
,getProviders
,hasBeenBootstrapped
,loadDeferredProviders
,loadEnvironmentFrom
,routesAreCached
,setLocale
,shouldSkipMiddleware
,tamatkan
akan ditambahkan padaIlluminate/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 pembantulaluan 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 pembanturoute
: 🎜if (($lock = Cache::lock('foo', 10))->get()) { // 执行任务… $lock->release();}
🎜 Oleh itu, jika anda ingin menentukan laluanpassword.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 kelasIlluminateCacheRepository
dan kelas sambungannya Kemas kini ini dilengkapkan dengan kaedahsetDefaultCacheTime
dan kaedahlet
semua memori cache. Sila lihat PR berkaitan untuk butiran.IlluminateCacheRepository
类和它的扩展类的put
,putMany
,add
,remember
和setDefaultCacheTime
方法,以及所有缓存存储器的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
类中的put
,putMany
和add
方法的 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();
但是,如果要手动调用,
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 contohCache::lock()->release()
,则必须更新代码以维护锁的实例。然后,在完成任务后,可以在同一个锁实例上调用release
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 kiniParameter TTL IlluminateCacheRepository untuk kaedah put
,putMany
danadd
dalam kelas untuk menjadikannya lebih mematuhi PSR-16 spesifikasi. Ciri baharu menyediakannull
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. 🎜🎜AcaraKeyWritten
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 kuncifoo
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 kuncifoo
. Akhirnya Klien A menyelesaikan tugasnya dan melepaskan kuncifoo
, 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 kaedahCache::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, kaedahrelease
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;
Repository
和Store
契约影响可能性:非常低
为了完全符合
PSR-16
的要求,IlluminateContractsCacheRepository
契约的put
和forever
方法的返回值以及IlluminateContractsCacheStore
契约的put
,putMany
和forever
方法 已更改 从void
到bool
。集合
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);
Potensi kesan : Sangat rendah🎜🎜Untuk mematuhi sepenuhnya keperluanRepositori
dan KontrakStore
PSR-16
, kontrakIlluminateContractsCacheRepository
put
danforever
dan kaedahput
,putMany
danforever
bagiIlluminateContractsCacheStore
kontrak telah ditukar Daripadavoid
kepadabool
. 🎜Kaedah
🎜Kemungkinan impak: sangat rendah🎜🎜 kaedahfirstWhere firstWhere 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
🎜Kesan Kemungkinan: Sangat rendah🎜🎜KaedahKernel
Kontrakterminate
telah ditambahkan pada kontrakIlluminate/Contracts/Console/Kernel
. Jika anda melaksanakan antara muka ini, anda harus menambah kaedah ini pada kelas pelaksana. 🎜Bekas
Perkhidmatan Penjana & Teg
🎜Kemungkinan Kesan: Sederhana🎜🎜Kaedahteg kontena dijana menggunakan PHP Pembekal malas membuat instantiate perkhidmatan dengan tag yang diberikan. Disebabkan perubahan ini, kaedah tag
mengembalikan jenisiterable
dan bukannyaarray
. Jika kaedah anda menggunakan nilai pulangan pembayang jenis, pastikan anda menukar pembayang jenis kepada jenisboleh diulang
juga. 🎜🎜Selain itu, perkhidmatan tag tidak lagi boleh diakses secara langsung melalui nilai offset tatasusunan, seperti$container->tagged('foo')[0]
. 🎜
🎜Impak yang berpotensi: sangat rendah🎜🎜 kaedahkaedah
selesaiselesai
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. 🎜
🎜Kemungkinan kesan: Sangat rendah🎜🎜addContextualBinding
kaedahIlluminateContractsContainerContainer
Kontrak menambahaddContextualBinding kod> 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 的自定义中继模型
如果你用一个自定义的中继模型定义了多对多的关系,而且这个中继模型拥有一个自增的主键,你应当确保这个自定义中继模型类中定义了一个
rrreeeincrementing
属性其值为true
:loadCount
方法影响可能性:低
基础类
IlluminateDatabaseEloquentModel
中添加了loadCount
方法。如果你的应用中也定义了loadCount
方法,可能会和 Eloquent 中的相冲突。originalIsEquivalent
方法影响可能性:非常低
IlluminateDatabaseEloquentConcernsHasAttributes
trait 中的originalIsEquivalent
成员方法从protected
改变为public
。deleted_at
Kemungkinan kesan: Rendah
kaedahkaedah kini mengembalikan jenis boleh lelar dan bukannya tatasusunan < /kod> taip. Jika parameter kod anda mempunyai petunjuk jenis, cari semua petunjuk kaedah tag
jenisarray
dan tukar pembayang jenis kepada jenisiterable
.flush 🎜🎜🎜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 atributincrementing
yang nilainya ialahbenar
: 🎜rrreee🎜loadCount
kaedah 🎜🎜🎜Kemungkinan kesan: rendah🎜🎜🎜Kelas asasIlluminateDatabaseEloquentModel Ditambah
ditukar kepadaloadCount
kaedah dalam . >. Jika aplikasi anda juga mentakrifkan kaedahloadCount
, ia mungkin bercanggah dengan kaedah dalam Eloquent. 🎜🎜 kaedahoriginalIsEquivalent
🎜🎜🎜Potensi impak: Sangat rendah 🎜🎜🎜IlluminateDatabaseEloquentConcernsHasAttributes
kaedah ahli dalamIlluminateContribunscode>IlluminateConcodeDatabase cted public
. 🎜🎜Penukaran pemadaman lembut automatik bagi atributdeleted_at
🎜🎜🎜Kemungkinan kesan: rendah🎜🎜Apabila model Eloquent anda menggunakan ciri
rrreeeIlluminateDatabaseEloquentSoftDeletes
, harta ahlideleted_at
kini akan ditukar secara automatik kepada contohCarbon
. Anda boleh mengatasi tingkah laku ini dengan menulis pengakses tersuai anda untuk harta ahli atau menambahkannya secara manual pada atributcasts
:IlluminateDatabaseEloquentSoftDeletes
trait 时deleted_at
成员属性 现将会自动转换 成为一个Carbon
实例。你可以重写这个行为,通过为该成员属性编写你的自定义 accessor 或者手动将它添加到casts
属性中:BelongsTo
的getForeignKey
方法影响可能性:低
BelongsTo
关联关系中的getForeignKey
和getQualifiedForeignKey
方法已分别重命名为getForeignKeyName
和getQualifiedForeignKeyName
,使得方法名和在 Laravel 提供的其他关联关系中保持一致。事件
fire
方法影响可能性:低
Illuminate/Events/Dispatcher
类中的fire
方法 (在 Larevel 5.4 中不赞成使用) 已经被 移除 了。
你应当使用它的替代方法dispatch
。异常处理器
ExceptionHandler
契约影响可能性:低
IlluminateContractsDebugExceptionHandler
契约中新增了shouldReport
方法。 现在当你实现异常处理器的接口时,你需要同时实现此方法。renderHttpException
方法影响可能性:低
rrreeeIlluminateFoundationExceptionsHandler
类中renderHttpException
方法的签名 有改动 。现在如果你在异常处理器中重写此方法,应当修改方法的签名以和其父类保持一致:Facades
Facade 服务解析
影响可能性:低
getFacadeAccessor
方法现在可以 只返回代表服务容器标识的字符串 ,之前该方法会返回一个对象实例。邮件
Markdown 文件路径更改
影响可能性:高
如果你已经使用
vendor:publish
命令发布了 Laravel 的 Markdown 邮件组件,你需要将/resources/views/vendor/mail/markdown
路径重命名为text
。并且
markdownComponentPaths
方法 已被重命名 为textComponentPaths
。如果你要重写这个方法,你应该更新方法名,使之与其父类一致。PendingMail
rrreeeBelongsTo
's code>getForeignKey kod> kaedahKemungkinan impak: Rendah
🎜Milik Kaedah getForeignKey
dangetQualifiedForeignKey
dalam perhubungan telah dinamakan semula kepadagetForeignKeyName 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 menggunakanpenghantaran
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 kaedahrenderHttpException
dalamKelas IlluminateFoundationExceptionsHandler
telah berubah. Sekarang jika anda mengatasi kaedah ini dalam pengendali pengecualian, anda harus mengubah suai tandatangan kaedah agar konsisten dengan kelas induknya: 🎜rrreeeFasad
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 menggunakanvendor:publish
arahan Untuk menggunakan komponen mel Markdown Laravel, anda perlu menamakan semula laluan/resources/views/vendor/mail/markdown
kepadatext
. 🎜🎜Dan kaedahmarkdownComponentPaths
telah dinamakan semula kepadatextComponentPaths
. 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
dandalam
telah ditukar untuk menerima contohIlluminateMailPendingMail
kelas Kaedah >isiIlluminateContractsMailMailable
sebagai parameter dan bukannya contohIlluminateMailMailable
. Jika anda ingin mengatasi kaedah, anda perlu mengemas kini parameternya agar konsisten dengan kelas induknya.IlluminateMailPendingMail
类中的send
,sendNow
,queue
,later
和fill
方法 已被更改 为需接收一个IlluminateContractsMailMailable
实例作为参数,而不是IlluminateMailMailable
实例。如果你要重写其中的方法,你需要更新其形参,和其父类保持一致。队列
Pheanstalk 4.0
影响可能性:中
Laravel 5.8 提供了支持
~4.0
发布版本的 Pheanstalk 队列。如果你正在应用中使用 Pheanstalk 库,请通过 Composer 升级你的库到~4.0
发布版本。Job
契约影响可能性:非常低
isReleased
,hasFailed
和markAsFailed
方法 已被加入到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
中间件影响可能性:低
现在,当请求输入是一个数组时,
rrreeeIlluminateFoundationHttpMiddlewareTransformsRequest
中间件的transform
方法将接收到「全限定」 请求输入的 key :路由
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
danmarkAsFailed
Kaedah telah ditambahkan pada kontrakIlluminateContractsQueueJob
. 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 kaedahFailingJob::handle
. Dalam Laravel 5.8, logik dalam kelasFailingJob
telah dipindahkan ke kaedahfail
, yang ditakrifkan dalam kelas tugas ini. Oleh sebab itu, kaedahgagal
disertakan dalam kontrakIlluminateContractsQueueJob
. 🎜🎜IlluminateQueueJobsJob
Kelas asas mengandungi pelaksanaangagal
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 kaedahfail< 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. 🎜
dalam Illuminate/Routing/UrlGenerator (ditamatkan dalam Laravel 5.7) telah ditukar kepadaRedis 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,IlluminateFoundationHttpMiddlewareTransformsRequest
ThesRequest Kaedahtransform
middleware akan menerima kunci input permintaan "layak sepenuhnya": 🎜rrreeeRoute
UrlGenerator
protokol🎜🎜🎜 Kemungkinan impak: Sangat rendah🎜🎜Kaedah
sebelumnya
telah ditambahkan pada kontrakIlluminateContractsRoutingUrlGenerator
. 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_*
andstr_*
全局辅助函数 都被废弃。你需要直接使用IlluminateSupportArr
和IlluminateSupportStr
提供的方法。这个调整的影响被标记为中等,因为这些辅助函数被转移到新的 laravel/helpers 扩展包中,以便更好地向后兼容。
延迟的服务提供者
影响可能性:中等
服务提供程序的用于指示是否延迟提供程序的
defer
布尔属性已经被废弃。现在如果要将服务提供者标记为延迟的需要通过实现IlluminateContractsSupportDeferrableProvider
契约来完成。测试
PHPUnit 8
影响可能性:可选
默认情况下, Laravel 5.8 使用 PHPUnit 7.。不过, 你可以升级到 PHPUnit 8,但是这需要 PHP >= 7.2。更多细节请阅读 PHPUnit 8 版本声明。
rrreeesetUp
和tearDown
方法现在要求返回 void 类型:验证
Validator
契约影响可能性:非常低
rrreeeIlluminateContractsValidationValidator
中 新增了validated
方法:如果你调用了这个接口,需要添加此方法的实现。
ValidatesAttributes
特性影响可能性:非常低
IlluminateValidationConcernsValidatesAttributes
特性中的parseTable
、getQueryColumn
和requireParameterCount
方法可见性从protected
调整为了public
。DatabasePresenceVerifier
类影响可能性:非常低
IlluminateValidationDatabasePresenceVerifier
类的table
方法可见性从protected
调整为了public
Potensi kesan: sangat rendah🎜🎜cachedSchema
ciri dalam Illuminate/Routing/UrlGenerator< sifat kod>$cachedSchema $cachedScheme
. 🎜Sesi
🎜Impak yang berpotensi: Sangat rendah🎜🎜Logik kegigihan sesi telah ditukar daripada< Kod kaedah >terminate() dialihkan ke kaedahStartSession Middleware 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🎜🎜Semuaarray_*< /code> dan < code>str_*
fungsi pembantu global tidak digunakan lagi. Anda perlu menggunakan kaedah yang disediakan olehIlluminateSupportArr
danIlluminateSupportStr
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 booleanmenunda
pembekal perkhidmatan yang menunjukkan sama ada untuk menangguhkan pembekal Sudah ditinggalkan. Kini menandakan pembekal perkhidmatan sebagai tertunda perlu dilakukan dengan melaksanakan kontrakIlluminateContractsSupportDeferrableProvider
. 🎜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
dantearDown
kini memerlukan jenis pemulangan terbatal: 🎜rrreeePengesahan
Pengesah
Kontrak< /code> h4>🎜Kemungkinan impak: sangat rendah🎜🎜IlluminateContractsValidationValidator
Menambah kaedahdisahkan: 🎜rrreee🎜Jika anda memanggil antara muka ini, An pelaksanaan kaedah ini perlu ditambah. 🎜
🎜Potensi kesan: sangat rendah🎜🎜ValidatesAttributes
attributeIlluminateValidationConcernsValidatesAttributes
atribut dalamparseTable The visibility daripada kod>, kaedah
kelasgetQueryColumn
danrequireParameterCount
telah dilaraskan daripadaprotected
kepadapublic
. 🎜
🎜Potensi impak: sangat rendah🎜🎜DatabasePresenceVerifier
kelasIlluminateValidationDatabasePresenceVerifier jadual
Kaedah keterlihatan dilaraskan daripadadilindungi kepadaawam . 🎜Validator
kelasPotensi impak: sangat rendah
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
kelasgetPresenceVerifierFor Code> keterlihatan kaedah dilaraskan daripada
dilindungi kepadaawam .Lihat
getData
kaedahKemungkinan 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/SlackPotensi 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🎜. 🎜🎜