好的,Laravel 6.x 是一个重要的长期支持版本,引入了多项新特性和改进。以下是其主要特性:
-
语义化版本号 (Semantic Versioning):
- 从 Laravel 6 开始,框架正式采用了语义化版本号规范。这意味着:
- 主版本号 (
6) 的变化表示包含向后不兼容的重大变更。 - 次版本号 (
6.x) 的变化表示包含向后兼容的功能性新增。 - 修订版本号 (
6.x.y) 的变化表示包含向后兼容的错误修复。
- 主版本号 (
- 这为开发者在版本升级预期上提供了更清晰的指导。
- 从 Laravel 6 开始,框架正式采用了语义化版本号规范。这意味着:
-
Job Middleware:
- 允许为队列任务定义中间件,在任务执行前或执行后执行特定逻辑。
- 例如,可以创建中间件来记录任务执行时间、处理任务失败重试逻辑或限制任务速率。
- 提供了更大的灵活性和对任务执行流程的控制。
-
Eloquent 子查询增强:
-
在 Eloquent 查询构建器中,添加了对子查询作为查询条件的原生支持。
-
这使得编写涉及相关表数据的复杂查询更加简洁和高效。
-
例如:
phpUser::addSelect(['last_post' => Post::select('title') ->whereColumn('user_id', 'users.id') ->latest() ->limit(1) ])->get();
-
-
Eloquent 模型事件改进:
-
提供了更便捷的方式来注册模型事件监听器,允许使用闭包直接在模型类中定义。
-
替代了之前需要在
EventServiceProvider中注册监听器的常见做法。 -
例如:
phpclass User extends Model { protected static function booted() { static::created(function ($user) { // 用户创建后执行的操作 }); } }
-
-
任务调度改进:
-
任务调度器 (
Schedule) 新增了job方法,可以更优雅地调度自定义的Job类实例。 -
简化了将队列任务纳入调度的过程。
-
例如:
php$schedule->job(new ProcessPodcast)->everyFiveMinutes();
-
-
惰性集合 (
LazyCollection):- 引入
Illuminate\Support\LazyCollection类,用于处理大型数据集或分块读取数据源(如文件、数据库)。 - 它实现了
Iterator接口,只在需要时加载数据,显著降低内存消耗。 - 对于处理大量数据非常有用。
- 引入
-
dump()/dd()改进:- 内置的调试辅助函数
dump()和dd()现在支持一次传入多个参数进行调试输出。 - 提高了调试时的便利性。
- 内置的调试辅助函数
-
前端脚手架改进:
- 默认移除了
laravel/ui包(包含 Bootstrap/Vue 等前端脚手架)。 - 鼓励开发者使用更现代的、框架无关的前端工具链(如
npm install安装的laravel-mix配合 Webpack)。 laravel/ui仍然可以通过 Composer 单独安装。
- 默认移除了
-
helpers.php文件废弃:- 框架核心的
helpers.php文件被标记为废弃。其中的全局辅助函数已被迁移到Illuminate/Support命名空间下的类中(如Arr和Str)。 - 开发者应使用类方法替代全局函数(例如
Str::contains()替代str_contains()),虽然全局函数暂时仍可用。
- 框架核心的
-
新的授权门面 (
Gate):- 引入了一个新的
Gate门面,提供了一种简洁的方式来与授权系统交互。 - 替代了之前使用
Auth门面进行授权检查的方式(如Auth::user()->can())。
- 引入了一个新的
-
hasOneThrough关系:- 新增了
hasOneThroughEloquent 关系类型。 - 允许定义通过中间模型访问的"一对一"关联。
- 新增了
-
错误页面改进:
- 错误页面(如 404、500)的设计得到了更新,提供了更现代和清晰的视觉呈现。
总结: Laravel 6.x 专注于提升开发体验、代码质量和性能。它引入了如 Job Middleware、Eloquent 子查询、惰性集合等强大功能,改进了任务调度、模型事件处理和调试工具,并开始引导开发者采用更现代的前端工作流和面向对象的辅助函数用法。语义化版本号的采用也标志着框架成熟度的提升。