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 功能,例如 readonly
和 array_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。本地列编辑支持
使用 为了更好地理解这个新功能,请参见下面的示例: $ table->integer('user_balance')->unsigned()->default(0)->comment('balance'); // `user_balance` 是一个整数,无符号,默认为 0,列注释为 'balance' 现在假设我们有一个列 上面的代码设法独立更改列类型,但也拒绝COMMENTchange()
Laravel 10 有一项新功能,需要 doctrine/dbal 包。此功能允许开发人员使用
属性。因此,在更改列类型时,请务必记住添加所有属性: $table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance' ) -> change();change()
方法并修改 MySQL、PostgreSQL 和 SQL Server 列,而无需额外的包。这是一个巨大且有风险的突破性改变,但我们认为这是值得的,因为它消除了对额外软件包的需要。 user_balance
,我们想要更改它的类型。从 Laravel 10 开始,我们可以简单地这样做: $table->bigInteger('user_balance')->change(); // 这会将`user_balance`更改为bigInteger,而不仅仅是整数
如果您有多个数据库连接并且已安装 能够使用本地模式操作并在依赖包之前使用本地操作(例如SQLite还不支持此模式,Schemaport不支持此模式类AppServiceProvider扩展ServiceProvider{public function boot (){Schema::useNativeSchemaOperationsIfPossible();}} 8. 列类型的本地查找 Laravel 10 的另一个显着功能是能够使用 另一方面,在 Laravel 10 中,新的 9。更快的哈希算法 xxHash 它是一种令人难以置信的快速哈希算法。具有良好的输出随机性和分散性以及唯一性以减少碰撞。由于 PHP 8.1 支持 xxh128 并且 Laravel 10 在 PHP 8.1 上运行,因此 Laravel 10 中非常需要这种可靠的哈希算法。 值得一提的是,在评估此更改时,Taylor 指出,某些第三方包可能依赖于 Laravel 用于散列的 SHA-1 散列文件名的确切格式。因此,如果您计划升级到 Laravel 10,最好检查应用程序中使用的所有第三方软件包。 10。 Eloquent Builder 的 whereExists() 方法支持 当前使用 例如,如果我们想使用 在 Laravel 10 中我们可以这样做: Order::whereExists(Product:: whereColumn('products.orderid', 'orders.id ')); 11。快速加载优化 Laravel 10 的一个有趣的新功能是在未加载键时进行快速加载优化。此更改与其说是一项功能,不如说是一种修复,因为它解决了现有问题,即急切加载关系会导致大量不可能的查询。 目前,当急切加载关系时,不会执行键。加载时,Laravel 仍然会运行这样的查询 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 分支之间发现的所有弃用和删除的列表: doctrine/dbal
,建议使用 App\Providers\AppServiceProvider
中的所有相关删除都已完成。
Schema:: boot方法中使用NativeSchemaOperationsIfPossible()方法
。这鼓励开发人员使用Schema::getColumnType
方法而无需依赖在 包上。目前我们使用 Schema::getColumnType
和 doctrine/dbal
来获取列类型。 doctrine/dbal
将每个本地列类型映射到其 doctrine/dbal
类型,并且不支持 Laravel 在不同数据库中使用的许多列类型。 Schema::getColumnType
方法返回实际的列类型,而不是其 ❙❀❀❀❀ 对应项。它还允许您为新的本地列编辑功能编写集成测试。您可以使用此函数获取指定列的数据类型名称或完整类型规范:Schema::getColumnType('products', 'price'); // 小数whereExists()
必须使用闭包来定义嵌套查询。幸运的是,在 Laravel 10 中,现在可以使用 Eloquent Builder 作为嵌套查询。它允许使用自定义构建器方法、模板范围等。 whereExists()
,我们通常会这样做: Order::whereExists(function ($query) { $query->from('products')->whereColumn(' products.order_id ', 'orders.id');});
select \* from table `table_name' where 0 = 1
,10 更新检查以确保键可用,如果不可用则返回一个空集合,从而消除不必要的数据库查询。 Laravel 10 中已弃用的方法和包
Route::home
方法(在 Laravel 9 中已弃用) 方法 dispatchNowdispatchSync
,这是唯一受支持的立即调度方式。 getBaseQuery
,因为它有一个 toBase 对应项。MaintenanceModeException
类 MocksApplicationServices
属性 $datesAttribute,$dates 建议使用 $强制转换而不是
assertTimesSent()
方法。 2 支持
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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。