Laravel 10 向 PHP 8.0说再见!新功能和更新有哪些?

2023-02-1918:38:10后端程序开发Comments1,701 views字数 5372阅读模式

Laravel 10 向 PHP 8.0说再见!新功能和更新有哪些?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel 10标志文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

正如你已经知道的, Laravel 10还没有发布. 然而, 我们将保持这篇文章的更新,提供所有关于预期发布的新鲜信息。因此, 我们建议把这个页面加入书签,并不时地重温一下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel 10的新功能和更新

毫无疑问,任何新版本最令人兴奋的部分是增加了新的功能。所以不用多说, 让我们先来看看Laravel 10的新功能和更新。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

1. PHP 8.1: 在Laravel 10的核心
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

PHP 8.1是Laravel 10中最低要求的PHP版本。根据Laravel 9分支和GitHub上的框架主分支的比较,一些PHP 8.1的功能,如 readonly 属性和 array_is_list,预计将在Laravel 10中引入。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

2. 对PHP 8.2的支持
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

PHP 8.2是在2022年12月8日发布的, 离Laravel 10的发布日期只有两个月。然而,这不应该阻止你利用PHP 8.2的功能,因为不需要做任何额外的事情,Laravel 10就可以为PHP 8.2做好准备。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

事实上, 整个Laravel生态系统, 包括Forge, Vapor, 和Envoyer, 都支持PHP 8.2, 而且你甚至可以在Laravel 9中使用PHP 8.2。这有多酷啊!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

3. Laravel入门套件升级
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel Breeze和Jetstream已经准备好使用Laravel 10,一旦它被发布。此外, 他们也已经升级到Inertiajs 1了,JetStream有一个惊喜,就是完全支持黑暗模式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

4. Predis版本升级
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Predis是一个强大的Redis客户端,用于PHP,可能会帮助你获得最大的缓存,以提供一个美妙的用户体验。Laravel以前支持1和2两个版本, 但从Laravel 10开始, 该框架不再支持Predis 1.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

虽然Laravel文档中提到Predis是与Redis互动的包,但你也可以使用官方的PHP扩展。这个扩展提供了一个与Redis服务器通信的API.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

5. 本地类型声明
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel曾经在它的骨架代码中使用DocBlocks来澄清一段代码的作用,以及期待什么样的参数或响应。然而, 多亏了Laravel 10中的本地类型声明, 这将改变。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

解释这一变化的最好方式是用一个简单的例子。取而代之的是一个看起来像这样的函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

/**
* Determine whether the user can create models.
*
* @param \{{ namespacedUserModel }} $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create({{ user }} $user)
{
//
}

…它将看起来像这样:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

/**
* Determine whether the user can create models.
*/
public function create({{ user }} $user): bool
{
//
}

这一变化纯粹是为了有利于开发人员的体验,因为IDE会知道预期参数和响应的形状。它将提供更好的类型清晰度,而这是通过PHP本地类型无法做到的。因此,它将帮助代码编辑器更好地发挥自动完成功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

6. 所有的验证规则都是默认可调用的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

如果你想在Laravel 9中制作一个可调用的验证规则, 你需要在artisan命令后添加 --invokable 标志。这不再是必要的,因为所有Laravel 10的规则都是默认可调用的。所以, 你可以运行下面的命令来创建一个新的Laravel 10的可调用规则:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

php artisan make:rule CustomRule

7. 本地列的修改支持文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

为了消除使用 change() 修改列时对 doctrine/dbal 包的需求, Laravel 10将有一个新功能。这个功能将允许开发人员使用 change() 方法和修改MySQL, PostgreSQL, 和SQL Server上的列,而不需要额外的包。这是一个重大的和有风险的突破性变化,但我们相信这是值得的, 因为它将消除对额外包的需求.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

为了更好地理解这个新功能,请看下面的例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

$table->integer('user_balance')->unsigned()->default(0)->comment('balance'); // `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'

现在, 我们假设我们有一个 user_balance 的列,我们想改变它的类型。从Laravel 10开始,我们可以简单地这样做:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

$table->bigInteger('user_balance')->change(); // This will change `user_balance` to bigInteger instead of just integer

上面的代码将成功地改变列的类型,但也会放弃 UNSIGNEDDEFAULT 和 COMMENT 属性。因此,当你改变一个列的类型时,记住添加所有的属性是很重要的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();

在你有多个数据库连接并且已经安装了 doctrine/dbal 的情况下,建议在 App\Providers\AppServiceProvider 的 boot 方法中调用 Schema::useNativeSchemaOperationsIfPossible() 方法,以便能够使用本地模式操作,在依赖包之前使用本地操作(例如,SQLite还不支持这个):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Schema::useNativeSchemaOperationsIfPossible();
}
}

8. 列类型的本地检索文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel 10的另一个值得注意的特点是能够使用 Schema::getColumnType 方法,而不需要依赖 doctrine/dbal 包。目前我们使用 Schema::getColumnType 和 doctrine/dbal 来获取列的类型. doctrine/dbal 将每一个本地的列类型映射到它的 doctrine/dbal 类型等价物, 而且它不支持Laravel在不同数据库中使用的许多列类型.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

另一方面,在Laravel 10中,新的 Schema::getColumnType 方法将返回实际的列类型,而不是其 doctrine/dbal 等价物。它还可以让你为新的本地列修改功能编写集成测试。你可以使用这个功能来获得指定列的数据类型名称或整个类型定义:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Schema::getColumnType('products', 'price'); // decimal

9. 更快的哈希算法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

xxHash是一种速度惊人的哈希算法。它具有很好的输出随机性和分散性,以及唯一性以减少碰撞。由于PHP 8.1提供了对xxh128的支持,而Laravel 10运行在PHP 8.1上,在Laravel 10中拥有这样一个可靠的哈希算法是非常理想的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

值得一提的是,Taylor在审查这一变化时强调,一些第三方软件包可能依赖于文件名与SHA-1散列的确切格式,这是Laravel用于散列的算法。因此, 如果你计划升级到Laravel 10, 最好在你的应用程序中使用的任何第三方软件包中仔细检查一下.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

10. Eloquent Builder的whereExists()方法支持文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

目前, 使用 whereExists() 需要使用闭包来配置嵌套查询. 幸运的是, 在Laravel 10中, 现在可以将Eloquent Builder作为一个嵌套查询。它可以实现自定义构建器方法,模型作用域等的使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

例如,我们通常会这样做,如果我们想使用 whereExists()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Order::whereExists(function ($query) {
$query->from('products')->whereColumn('products.order_id', 'orders.id');
});

有了Laravel 10, 我们就可以这样做:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Order::whereExists(
Product::whereColumn('products.order_id', 'orders.id')
);

11. 急加载优化
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel 10的一个有趣的新功能是当没有任何键被加载时的急加载优化。这个变化与其说是一个功能, 不如说是一个修正, 因为它解决了当前的一个问题, 即急于加载关系导致大量不可能的查询被执行.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

目前,当急于加载关系,没有任何键被加载,Laravel仍然会执行类似于这样的查询 select \* from `table_name` where 0 = 1 然而,新的Laravel 10更新检查以验证是否有任何可用的键,如果没有,提供一个空集合,消除了不必要的数据库查询。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel 10中弃用的方法和包

Laravel 10向PHP 8.0说再见
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel框架将在Laravel 10中放弃对PHP 8.0的支持。因此, 如果你打算将你的应用程序升级到Laravel 10, 你必须先将PHP版本更新到PHP 8.1或PHP 8.2.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

Laravel 10弃用方法和删除文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

我们可以看到,Laravel核心团队正在从Laravel 10分支中删除Laravel 9中的弃用方法。我们预测团队会在Laravel 10发布后尽快更新文档的升级指南,以包括所有弃用的方法和包。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

如果你要把目前的项目迁移到Laravel 10,任何使用弃用方法的代码都应该用新的方法重新编写,以达到相同的效果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

下面是我们在比较Laravel 9和主分支时发现的所有弃用和删除的列表:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

  • Route::home 方法(在Laravel 9中被弃用)
  • 围绕 dispatchNow 的弃用函数和方法. 这是为了鼓励开发人员使用 dispatchSync,这是唯一支持的立即调度的方式。
  • getBaseQuery,因为它有一个toBase等价物。
  • 不再使用的 MaintenanceModeException 类
  • MocksApplicationServices 特质
  • mail fake的 Mail::failures 方法
  • 被弃用的 $dates 属性,建议使用$casts代替
  • assertTimesSent() 方法
  • 放弃了对 Predis 1 和 doctrine/dbal 2的支持
  • 自从Laravel放弃对版本2的支持后,doctrine/dbal 中所有相关的弃用。

如何安装Laravel 10

Laravel 10现在已经可以使用了, 你可以去体验和测试它的功能. 在Laravel安装程序中的 –dev 标志会安装来自 laravel/laravel 仓库的主分支。你所要做的就是在你的终端运行这个命令:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

laravel new example-wbolt-app --dev

或者,如果你喜欢使用Composer:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

composer create-project --prefer-dist laravel/laravel example-wbolt-app dev-master

为了更好地理解Composer命令,这里有一个快速解释:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

  • laravel/laravel:用于安装Laravel的软件包
  • example-kinsta-app::你的新项目的新目录(可以改变)
  • dev-master:Laravel的下一个版本(在这个例子中, Laravel 10)

安装Laravel 10后, 你可以通过导航到新目录example-wbolt-app并运行artisan命令来确认版本:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

$ php artisan --version
Laravel Framework 10.x-dev

如何将一个项目升级到Laravel 10

你是否想升级到Laravel 10? Laravel核心团队在文档上努力工作,以提供一个无缝和直接的升级指南,同时涵盖每一个可能的突破性变化。请随时查看Laravel 10的升级指南,因为现在已经有一些关于升级过程的信息.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

一旦Laravel 10发布,你也应该关注Laravel Shift。它提供了一个简单和自动化的方法来升级你的Laravel版本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

除了Laravel文档和Laravel Shift之外, 我们Kinsta将发布一个全面的升级指南,其中有真实的例子。所以, 不要忘了把这个页面收藏起来, 一旦Laravel 10发布, 再回来看看.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

如何部署Laravel 10项目

部署Laravel 10应该和部署Laravel 9项目没有太大区别。下面是我们期望的服务器要求可能是这样的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html

  • PHP >= 8.1
  • BCMath PHP扩展
  • Ctype PHP扩展
  • cURL PHP扩展
  • DOM PHP扩展
  • Fileinfo PHP扩展
  • JSON PHP扩展
  • Mbstring PHP扩展
  • OpenSSL PHP扩展
  • PCRE PHP扩展
  • PDO PHP扩展
  • Tokenizer PHP扩展
  • XML PHP扩展
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/30903.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/30903.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定