
在疯狂流行的框架推出十多年后,你有没有想过,”Laravel还能为PHP开发人员提供什么?”
鉴于它已经为初学者和专业开发人员简化了很多PHP开发,有些人甚至会说,它已经把开发人员宠坏了,认为PHP是最简单的编程语言。
那么, Laravel是否还为准备了更多的惊喜? 或者它已经用尽了所有可能的手段来支持PHP开发者?
嗯, 至少, 我们知道Laravel 10有很多东西可以提供。这就是我们在这篇文章中所要揭示的,我们将带你了解Laravel 10的新功能,修复,以及新淘汰的 *** 和包。
Laravel的核心团队曾经每年发布两个主要的版本 – 每六个月一个。
然而, 当Laravel的创建者Taylor Otwell每年只发布一个主要版本时, 这个发布周期就改变了. 这使得核心团队和社区能够将更多的时间和精力投入到特定版本的框架中,并引入新的强大功能,而不做任何破坏性的改变。
随着Laravel 9在2022年2月8日发布, 预期的发布时间表如下:
此外, 根据, 所有Laravel版本都提供18个月的错误修复和两年的安全更新.
以下是预计的错误修复和安全更新时间表:
重要的是要记住,我们并不总是需要在新版本发布后立即将我们应用程序的Laravel版本升级到最新版本。
Laravel是一个开源的框架, 这意味着每次我们在机器上安装一个新的Laravel实例时, 我们都拥有这个框架的代码库. 这意味着,即使我们的应用程序使用的框架版本不再支持,应用程序仍然可以工作,只是我们必须自己维护它。
因此,人们普遍建议,应用程序的稳定性应优先于框架的升级。
简而言之, 你应该考虑升级到Laravel 10,当:

Laravel 10标志
正如你已经知道的, Laravel 10还没有发布. 然而, 我们将保持这篇文章的更新,提供所有关于预期发布的新鲜信息。因此, 我们建议把这个页面加入书签,并不时地重温一下。
毫无疑问,任何新版本最令人兴奋的部分是增加了新的功能。所以不用多说, 让我们先来看看Laravel 10的新功能和更新。
1. PHP 8.1: 在Laravel 10的核心
PHP 8.1是Laravel 10中更低要求的PHP版本。根据Laravel 9分支和GitHub上的,一些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, 而且你甚至可以。这有多酷啊!
3. Laravel入门套件升级
Laravel Breeze和Jetstream已经准备好使用Laravel 10,一旦它被发布。此外, 他们也已经升级到了,JetStream有一个惊喜,就是完全支持黑暗模式。
4. Predis版本升级
Predis是一个强大的Redis客户端,用于PHP,可能会帮助你,以提供一个美妙的用户体验。Laravel以前支持1和2两个版本, 但从Laravel 10开始, 该框架不再支持Predis 1.
虽然Laravel文档中是与Redis互动的包,但你也可以使用。这个扩展提供了一个与Redis服务器通信的API.
5. 本地类型声明
Laravel曾经在它的骨架代码中使用DocBlocks来澄清一段代码的作用,以及期待什么样的参数或响应。然而, 多亏了Laravel 10中的本地类型声明, 这将改变。
解释这一变化的更好方式是用一个简单的例子。取而代之的是一个看起来像这样的函数:
/**
* Determine whether the user can create models.
*
* @param \{{ namespacedUserModel }} $user
* @return \Illuminate\Auth\access\Response|bool
*/
public function create({{ user }} $user)
{
//
}
…它将看起来像这样:
/**
* Determine whether the user can create models.
*/
public function create({{ user }} $user): bool
{
//
}
这一变化纯粹是为了有利于开发人员的体验,因为IDE会知道预期参数和响应的形状。它将提供更好的类型清晰度,而这是通过PHP本地类型无法做到的。因此,它将帮助代码编辑器更好地发挥自动完成功能。
6. 所有的验证规则都是默认可调用的
如果你想在Laravel 9中 *** 一个可调用的验证规则, 你需要在artisan命令后添加 --invokable 标志。这不再是必要的,因为所有Laravel 10的规则都是默认可调用的。所以, 你可以运行下面的命令来创建一个新的Laravel 10的可调用规则:
php artisan make:rule CustomRule
7. 本地列的修改支持
为了消除使用 change() 修改列时对 doctrine/dbal 包的需求, Laravel 10将有一个新功能。这个功能将允许开发人员使用 change() *** 和修改MySQL, PostgreSQL, 和SQL Server上的列,而不需要额外的包。这是一个重大的和,但我们相信这是值得的, 因为它将消除对额外包的需求.
为了更好地理解这个新功能,请看下面的例子:
$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开始,我们可以简单地这样做:
$table->bigInteger('user_balance')->change(); // This will change `user_balance` to bigInteger instead of just integer
上面的代码将成功地改变列的类型,但也会放弃 UNSIGNED, DEFAULT 和 COMMENT 属性。因此,当你改变一个列的类型时,记住添加所有的属性是很重要的:
$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();
在你有多个数据库连接并且已经安装了 doctrine/dbal 的情况下,建议在 App\Providers\AppServiceProvider 的 boot *** 中调用 Schema::useNativeSchemaOperationsIfPossible() *** ,以便能够使用本地模式操作,在依赖包之前使用本地操作(例如,SQLite还不支持这个):
use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Schema::useNativeSchemaOperationsIfPossible();
}
}
8. 列类型的本地检索
Laravel 10的另一个值得注意的特点是能够使用 Schema::getColumnType *** ,而不需要依赖 doctrine/dbal 包。目前我们使用 Schema::getColumnType 和 doctrine/dbal 来获取列的类型. doctrine/dbal 将每一个本地的列类型映射到它的 doctrine/dbal 类型等价物, 而且它不支持Laravel在不同数据库中使用的许多列类型.
另一方面,在Laravel 10中,新的 Schema::getColumnType *** 将返回实际的列类型,而不是其 doctrine/dbal 等价物。它还可以让你为新的本地列修改功能编写集成测试。你可以使用这个功能来获得指定列的数据类型名称或整个类型定义:
Schema::getColumnType('products', 'price'); // decimal
9. 更快的哈希算法
xxHash是一种速度惊人的哈希算法。它具有很好的输出随机性和分散性,以及唯一性以减少碰撞。由于PHP 8.1提供了对xxh128的支持,而Laravel 10运行在PHP 8.1上,在Laravel 10中拥有这样一个可靠的哈希算法是非常理想的。
值得一提的是,这一变化时强调,一些第三方软件包可能依赖于文件名与SHA-1散列的确切格式,这是Laravel用于散列的算法。因此, 如果你计划升级到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.order_id', 'orders.id')
);
11. 急加载优化
Laravel 10的一个有趣的新功能是当没有任何键被加载时的。这个变化与其说是一个功能, 不如说是一个修正, 因为它解决了当前的一个问题, 即急于加载关系导致大量不可能的查询被执行.
目前,当急于加载关系,没有任何键被加载,Laravel仍然会执行类似于这样的查询 select \* from `table_name` where 0 = 1 然而,新的Laravel 10更新检查以验证是否有任何可用的键,如果没有,提供一个空 *** ,消除了不必要的数据库查询。
Laravel 10向PHP 8.0说再见
Laravel框架将在Laravel 10中放弃对PHP 8.0的支持。因此, 如果你打算将你的应用程序升级到Laravel 10, 你必须先将PHP版本更新到或.
Laravel 10弃用 *** 和删除
我们可以看到,Laravel核心团队正在从Laravel 10分支中删除Laravel 9中的弃用 *** 。我们预测团队会在Laravel 10发布后尽快更新文档的升级指南,以包括所有弃用的 *** 和包。
如果你要把目前的项目迁移到Laravel 10,任何使用弃用 *** 的代码都应该用新的 *** 重新编写,以达到相同的效果。
下面是我们在比较Laravel 9和主分支时发现的所有弃用和删除的列表:
Route::home *** (在Laravel 9中被弃用)dispatchNow 的弃用函数和 *** . 这是为了鼓励开发人员使用,这是唯一支持的立即调度的方式。getBaseQuery,因为它有一个toBase等价物。MaintenanceModeException 类MocksApplicationServices 特质Mail::failures *** $dates 属性,建议使用$casts代替assertTimesSent() *** Predis 1 和 doctrine/dbal 2的支持doctrine/dbal 中所有相关的弃用。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 10后, 你可以通过导航到新目录example-wbolt-app并运行artisan命令来确认版本:
$ php artisan --version Laravel Framework 10.x-dev
你是否想升级到Laravel 10? Laravel核心团队在文档上努力工作,以提供一个无缝和直接的升级指南,同时涵盖每一个可能的突破性变化。请随时查看,因为现在已经有一些关于升级过程的信息.
一旦Laravel 10发布,你也应该关注。它提供了一个简单和自动化的 *** 来升级你的Laravel版本。
除了Laravel文档和Laravel Shift之外, 我们Kinsta将发布一个全面的升级指南,其中有真实的例子。所以, 不要忘了把这个页面收藏起来, 一旦Laravel 10发布, 再回来看看.
部署Laravel 10应该和部署Laravel 9项目没有太大区别。下面是我们期望的服务器要求可能是这样的:
虽然Laravel是由一个核心团队维护的, 但它是由超过贡献者积极开发的.
你想成为这些贡献者中的一员,帮助塑造Laravel的未来吗?如果你的回答是肯定的, 你可以帮助全世界的开发者增加一个新的功能, 修复一个错误, 甚至改写文档中混乱的部分.
要想为Laravel 10做出贡献, 你需要做的是以下几点:
[10.x] 的拉动请求。这将使你清楚地了解Laravel 10的所有拉动请求。如果其中有一个PR是针对你打算做的贡献的, 看看你是否可以改进它.喜欢Laravel 10的另一个原因是,它允许你通过bug hunts为你的贡献赢得金钱! 我们接下来会看一下这些。

Laravel 10 猎虫大赛
Laravel 10宣布了一个很好的比赛,其中一个随机的贡献者有机会赢得1000美元。
这将是Laravel历史上之一次这样的比赛。它的目的是鼓励社区发现和修补Laravel 10中隐藏的bug。
规则很简单:
laravel/framework 仓库的10.x分支的PR才有资格。比赛将在Laravel 10的之一个稳定版本发布时结束. 任何拉动请求,如果到那时仍在等待或在Laravel 10发布后提交,将没有资格参加。
这不是这篇文章的全部内容! 直到发布日期,还会有更多的变化。但就目前而言, Laravel 10似乎是非常有前途的, 我们很高兴能介绍它给PHP世界带来的所有礼物.
宝塔面板另外一个特质是,你无需通过Linux命令行来查看服务器各项指标状况,即可以阿里云服务器类似的可视化图表,查看资源使用、负载、CPU占用及内容使用百分比等指标。 默认监控是关闭,有需要的,可以开启,监控数据默认保存30天,可以自行修改,默认监控数据保存在日志,可手动清理该日志。 监控管理,...
宝塔面板其中一个最为便捷的功能之一,无需SFTP或者FTP即可对服务器的文件内容进行上传、下载、编辑及删除等管理操作。 文件管理,用于管理该服务器上的文件内容。 文件的基础操作 文件的基础操作有哪些了,主要有这些方面:复制、粘贴、剪切、删除、重命名、压缩、刷新、新建文件、新建目录。...
想成为一名网络开发人员或好奇工作的哪些子类型的薪水最高?Web开发是一个竞争激烈、多样化的行业,随着新语言和框架的出现而不断发展。 询问Web开发人员的薪水是一个难以解决的问题(尽管我们尝试)。有太多的因素需要考虑。 无论您是自由开发者还是有兴趣从事更传统的工作、喜欢前端或后端工作,或者想知...
您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了! Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。 尽管如此,如果你不使用正确的优化技术,Lara...
市场上有各种各样的数据库可供选择,用户通常可以仔细考虑PostgreSQL与SQL Server,以便为他们的用例找出更好的选择。使用PostgreSQL进行运营的组织可能希望切换到像Microsoft SQL Server这样的数据库,因为它主要迎合不同的数据仓库解决方案、电子商务和其他业务线...
随着越来越需要以更快的周转时间生产可扩展、安全和灵活的应用程序,Microservices和APIs在软件开发领域无处不在。 客户需求瞬息万变,他们希望软件解决方案能够减轻他们的任务并为他们提供便利。 采用单体架构的传统方法限制了开发人员进行大量创新。由于它们的成分很硬,因此在应用程序中进行...