Code前端首页关于Code前端联系我们

Laravel 10 告别 PHP 8.0!有哪些新功能和更新?

terry 2年前 (2023-09-24) 阅读数 58 #后端开发

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

Laravel 10 徽标

如您所知,Laravel 10 尚未发布。不过,我们将随时更新本文,提供有关预期版本的任何最新信息。因此,我们建议将此页面添加为书签并时常重新访问。

Laravel 10 中的新功能和更新

毫无疑问,新版本中最令人兴奋的部分是新功能的添加。话不多说,让我们来看看 Laravel 10 中的新功能和更新。

1。 PHP 8.1:Laravel 10 的核心

PHP 8.1 是 Laravel 10 作为 PHP 版本的最低要求。根据 Laravel 9 分支和 GitHub 上框架 master 分支的比较,一些 PHP 8.1 功能,例如 readonlyarray_is_list 预计将在 Laravel 10 中引入。

2。对 PHP 8.2

的支持 PHP 8.2 于 2022 年 12 月 8 日发布,距离 Laravel 10 的发布日期仅两个月。然而,这不应该阻止您利用 PHP 8.2 功能,因为 Laravel 10 已经为 PHP 8.2 做好了准备,而无需您做任何额外的事情。

事实上,整个 Laravel 生态系统,包括 Forge、Vapor 和 Envoyer,都支持 PHP 8.2,甚至可以将 PHP 8.2 与 Laravel 9 一起使用。这多酷啊!

3。 Laravel 入门套件更新

Laravel Breeze 和 Jetstream 在 Laravel 10 发布后即可使用。此外,他们还更新到了 Inertiajs 1,还有一个惊喜是 JetStream 完全支持深色模式。

4。 Predis 版本更新

Predis 是一款功能强大的 PHP Redis 客户端,可以帮助您获得最大的缓存并提供出色的用户体验。 Laravel 曾经支持版本 1 和 2,但从 Laravel 10 开始,该框架不再支持 Predis 1。

虽然 Laravel 文档提到 Predis 是一个与 Redis 交互的包,但你也可以使用官方的 PHP 插件。该插件提供了一个API来与Redis服务器进行通信。

5。本地类型声明

Laravel 在其主体代码中使用 DocBlocks 来阐明一段代码的作用以及期望或响应哪些参数。然而,由于 Laravel 10 中的本地类型声明,这种情况正在改变。

解释这一变化的最好方法是用一个简单的例子。相反,有一个如下所示的函数: /*** 确定用户是否可以创建模型。** @param \{{ namespacedUserModel }} $user* @return \Illuminate\Auth\Access\Response|bool*/ public function create ({{ user }} $user){//}

...看起来像这样: /*** 判断用户是否可以创建模板。*/public function create({{ user }} $user ): bool{/ /}

此更改只会有利于开发者体验,因为 IDE 知道预期的参数和响应的格式。它提供了更好的类型清晰度,这是 PHP 本机类型不可能实现的。因此,它可以帮助代码编辑器通过自动完成更好地工作。

6。所有验证规则默认都是可调用的

如果你想在 Laravel 9 中创建可调用的验证规则,你需要在 artisan 命令后面添加 --invokable 标志。这不再是必要的,因为默认情况下所有 Laravel 10 规则都是可调用的。因此,您可以运行以下命令为 Laravel 10 创建新的可调用规则:php artisan make:rule CustomRule

7。本地列编辑支持

使用 change() Laravel 10 有一项新功能,需要 doctrine/dbal 包。此功能允许开发人员使用 change() 方法并修改 MySQL、PostgreSQL 和 SQL Server 列,而无需额外的包。这是一个巨大且有风险的突破性改变,但我们认为这是值得的,因为它消除了对额外软件包的需要。

为了更好地理解这个新功能,请参见下面的示例: $ table->integer('user_balance')->unsigned()->default(0)->comment('balance'); // `user_balance` 是一个整数,无符号,默认为 0,列注释为 'balance'

现在假设我们有一个列 user_balance,我们想要更改它的类型。从 Laravel 10 开始,我们可以简单地这样做: $table->bigInteger('user_balance')->change(); // 这会将`user_balance`更改为bigInteger,而不仅仅是整数

上面的代码设法独立更改列类型,但也拒绝COMMENT

属性。因此,在更改列类型时,请务必记住添加所有属性: $table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance' ) -> change();

如果您有多个数据库连接并且已安装 doctrine/dbal,建议使用 App\Providers\AppServiceProvider

  • Schema:: boot方法中使用NativeSchemaOperationsIfPossible()方法

    能够使用本地模式操作并在依赖包之前使用本地操作(例如SQLite还不支持此模式,Schemaport不支持此模式类AppServiceProvider扩展ServiceProvider{public function boot (){Schema::useNativeSchemaOperationsIfPossible();}}

    8. 列类型的本地查找

    Laravel 10 的另一个显着功能是能够使用 Schema::getColumnType 方法而无需依赖在 包上。目前我们使用 Schema::getColumnTypedoctrine/dbal 来获取列类型。 doctrine/dbal 将每个本地列类型映射到其 doctrine/dbal 类型,并且不支持 Laravel 在不同数据库中使用的许多列类型。

    另一方面,在 Laravel 10 中,新的 Schema::getColumnType 方法返回实际的列类型,而不是其 ❙❀❀❀❀ 对应项。它还允许您为新的本地列编辑功能编写集成测试。您可以使用此函数获取指定列的数据类型名称或完整类型规范:Schema::getColumnType('products', 'price'); // 小数

    9。更快的哈希算法

    xxHash 它是一种令人难以置信的快速哈希算法。具有良好的输出随机性和分散性以及唯一性以减少碰撞。由于 PHP 8.1 支持 xxh128 并且 Laravel 10 在 PHP 8.1 上运行,因此 Laravel 10 中非常需要这种可靠的哈希算法。

    值得一提的是,在评估此更改时,Taylor 指出,某些第三方包可能依赖于 Laravel 用于散列的 SHA-1 散列文件名的确切格式。因此,如果您计划升级到 Laravel 10,最好检查应用程序中使用的所有第三方软件包。

    10。 Eloquent Builder 的 whereExists() 方法支持

    当前使用 whereExists() 必须使用闭包来定义嵌套查询。幸运的是,在 Laravel 10 中,现在可以使用 Eloquent Builder 作为嵌套查询。它允许使用自定义构建器方法、模板范围等。

    例如,如果我们想使用 whereExists(),我们通常会这样做: Order::whereExists(function ($query) { $query->from('products')->whereColumn(' products.order_id ', 'orders.id');});

    在 Laravel 10 中我们可以这样做: Order::whereExists(Product:: whereColumn('products.orderid', 'orders.id '));

    11。快速加载优化

    Laravel 10 的一个有趣的新功能是在未加载键时进行快速加载优化。此更改与其说是一项功能,不如说是一种修复,因为它解决了现有问题,即急切加载关系会导致大量不可能的查询。

    目前,当急切加载关系时,不会执行键。加载时,Laravel 仍然会运行这样的查询 select \* from table `table_name' where 0 = 1,10 更新检查以确保键可用,如果不可用则返回一个空集合,从而消除不必要的数据库查询。

    Laravel 10 中已弃用的方法和包

    Laravel 10 告别 PHP 8.0

    Laravel 框架删除了从 PHP 8.10 到 Laravel10 的支持。 ,您必须首先将 PHP 版本升级到 PHP 8.1 或 PHP 8.2。

    Laravel 10 弃用的方法和删除

    正如我们所看到的,Laravel 核心团队在 Laravel 9 中弃用的方法已从 Laravel 10 分支中删除。我们预计团队将在 Laravel 10 发布后尽快更新升级指南文档,以包含所有已弃用的方法和包。

    如果您要将当前项目迁移到 Laravel 10,则应使用新方法重写任何使用已弃用方法的代码以达到相同的效果。

    以下是我们在 Laravel 9 和 master 分支之间发现的所有弃用和删除的列表:

    • Route::home 方法(在 Laravel 9 中已弃用) 方法 dispatchNow
    。这鼓励开发人员使用dispatchSync,这是唯一受支持的立即调度方式。
  • getBaseQuery,因为它有一个 toBase 对应项。
  • 已弃用 MaintenanceModeException
  • MocksApplicationServices 属性
  • 错误:
    • 方法
    • 已弃用 $datesAttribute,$dates 建议使用 $强制转换而不是
    • assertTimesSent() 方法。 2 支持
    • 自从 Laravel 停止支持版本 2 以来,版本 doctrine/dbal
  • 中的所有相关删除都已完成。

    Laravel 10 安装

    Laravel 10 现已推出,您可以体验和测试其功能。 Laravel 安装程序 –dev 标志从存储库的主分支的 /laravel 安装 laravel。您只需要在终端中运行此命令:laravel new example-wbolt-app --dev

    或者如果您想使用 Composer:composer create-project --prefer-dist laravel/laravel example-wbolt - App dev -master

    为了更好地理解 Composer 命令,这里有一个快速解释:

    • laravel/laravel:Laravel 安装包
    • :新项目的目录(可以更改)
    • dev-master : Laravel 的下一个版本(本例中为 Laravel 10)

    安装 Laravel 10 后,您可以转到新目录 example-wbolt-app 并通过以下方式确认版本运行 artisan 命令: $ php artisan --version Laravel Framework 10.x-dev

    如何将项目升级到 Laravel 10 您想要升级 您是否正在迁移到 Laravel 10? Laravel 核心团队在文档方面下了很大的功夫,以提供无缝且简单的升级指南,涵盖所有潜在的重大更改。查看 Laravel 10 升级指南,因为它现在提供了有关升级过程的一些信息。

    当 Laravel 10 发布时,您还应该留意 Laravel Shift。它提供了一种简单且自动的方式来更新 Laravel 版本。

    除了 Laravel 文档和 Laravel Shift 之外,我们 Kinsta 还发布了包含真实示例的综合更新指南。因此,不要忘记将此页面添加为书签,并在 Laravel 10 发布时返回该页面。

    Laravel 10 项目部署

    Laravel 10 部署与 Laravel 9 项目部署应该没有太大区别。我们期望服务器要求如下所示:

    • PHP >= 8.1
    • BCMath PHP 扩展
    • Ctype PHP 扩展
    • cURL PHPleleFiinfo♼
    • JSON PHP 扩展 Mbstring PHP 扩展
    • OpenSSL PHP 扩展
    • PCRE PHP 扩展tokPDO PHP 扩展
      • XML PHP 扩展

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门