好的,Laravel 5.x 是一个重要的版本系列,它引入了许多新特性和改进,极大地提升了开发效率和框架能力。以下是 Laravel 5.x 系列(通常指 5.0 到 5.8)的一些关键特性概述:
核心特性与改进
-
目录结构重构 (5.0):
- 移除了旧的
app/models目录,鼓励将模型放在app根目录下。 - 引入了
app/Http目录,用于存放控制器、中间件和请求类。 - 引入了
Contracts(契约) 目录 (app/Contracts),用于定义接口。 - 引入了
Providers目录 (app/Providers),用于存放服务提供者。
- 移除了旧的
-
路由缓存 (5.0):
- 提供了
php artisan route:cache命令,将路由文件编译成单个缓存文件,显著提升路由注册速度(尤其是在生产环境中)。使用此功能时,路由文件必须是纯 PHP 文件。
- 提供了
-
中间件 (5.0):
- 取代了过滤器:HTTP 中间件提供了一种更灵活、更强大的机制来处理 HTTP 请求。可以定义在路由或控制器之前或之后执行的中间件。
- 内置中间件 :提供了
auth,csrf,guest等常用中间件。 - 自定义中间件:开发者可以轻松创建自己的中间件。
-
Contracts (契约) 和 Facades (门面) 改进 (5.0):
- 更广泛地使用接口 (
Contracts) 来定义框架核心服务的契约。 Facades提供了这些契约的静态代理,简化了使用。框架核心组件都提供了对应的契约和门面。
- 更广泛地使用接口 (
-
Artisan 命令改进 (5.0):
- 命令系统 (
Illuminate\Console\Command) 被重构,使其更易扩展。 - 提供了
php artisan make:command来生成自定义 Artisan 命令。
- 命令系统 (
-
任务调度 (Scheduler) (5.0):
- 引入了强大的任务调度器 (
Illuminate\Console\Scheduling),通过schedule方法定义在app/Console/Kernel.php中。 - 替代了传统的 Cron 配置,允许直接在 Laravel 应用中定义定时任务。只需在服务器 Cron 中添加一行
php artisan schedule:run。
- 引入了强大的任务调度器 (
-
Eloquent 改进 (5.x 各版本):
- 批量赋值白名单/黑名单 :模型属性默认不可批量赋值 (
$guarded或$fillable属性)。 - 访问器和修改器:更灵活地定义属性的获取和设置方式。
- 查询作用域:允许封装常用的查询约束。
- 软删除 :内置支持 (
SoftDeletestrait)。 - 模型事件 :支持模型事件监听 (
creating,created,updating,updated,saving,saved,deleting,deleted,restoring,restored)。
- 批量赋值白名单/黑名单 :模型属性默认不可批量赋值 (
-
Blade 模板引擎改进 (5.x 各版本):
@inject指令:允许将服务容器中的实例注入到 Blade 视图中。@include改进:支持传递额外数据。@each指令 (5.3):简化了循环输出视图片段。- 组件和插槽 (5.4):引入了组件和插槽的概念,用于创建可复用的布局结构。
-
表单请求类 (5.0):
- 允许创建专门的请求类 (
Illuminate\Foundation\Http\FormRequest) 来处理表单验证逻辑,将验证逻辑从控制器中分离出来。
- 允许创建专门的请求类 (
-
Laravel Elixir (5.0):
- 基于 Gulp 的资产构建工具,用于编译 CSS、JavaScript 等。 (注意:在 Laravel 5.4 及之后被 Laravel Mix 取代)。
子版本亮点
-
Laravel 5.1 (LTS):
- 第一个提供 长期支持 (Long Term Support - LTS) 的版本(Bug 修复支持 2 年,安全修复支持 3 年)。
- 路由模型绑定支持隐式绑定。
- 测试辅助方法增强。
- Eloquent 支持
where子查询。
-
Laravel 5.2:
- 引入了 路由组中间件 (
Route::group(['middleware' => 'auth'], ...)),简化了为路由组应用中间件的方式。 - 中间件参数:允许向中间件传递参数。
- 简化了 身份认证脚手架 (
php artisan make:auth)。 - 引入了 隐式模型绑定 (
Route::get('user/{user}', ...)),自动解析模型实例。 - Elixir 支持 BrowserSync。
- 引入了 路由组中间件 (
-
Laravel 5.3:
- 引入了 Laravel Echo 和 Laravel Passport (API 认证)。
- 通知系统 (
Illuminate\Notifications):统一的消息发送渠道 (邮件、短信、Slack 等)。 - 实时渲染邮件 (
$message->render()),方便调试邮件模板。 - 引入了
php artisan preset命令用于前端脚手架预设。 Eloquent新增firstOrCreate/updateOrCreate等方法。
-
Laravel 5.4:
- 引入了 Laravel Dusk:强大的浏览器自动化测试工具。
- 引入了 Laravel Mix:基于 Webpack 的现代化资产编译工具,取代了 Elixir。
- Blade Components and Slots:强大的模板组件功能。
- Markdown Mailables & Notifications:支持使用 Markdown 语法编写邮件和通知模板。
- 路由函数
Route::view:快速定义仅返回视图的路由。 - 高精度定时任务调度 (支持秒级
->everySecond())。 - 集合新增
Higher Order Messages支持 ($collection->map->myMethod)。
-
Laravel 5.5 (LTS):
- 另一个 LTS 版本。
- 自动包发现:Composer 包可以自动注册服务提供者和门面。
- 自定义异常处理 :在
App\Exceptions\Handler中提供了render和report方法更细粒度的控制。 - 迁移自动回滚:测试失败时自动回滚数据库迁移。
- 路由模型绑定定制 (
Route::get('user/{user:slug}', ...))。 - 自定义验证规则对象。
- 邮件队列 (
ShouldQueue接口)。 - 前端脚手架默认包含 Vue.js。
-
Laravel 5.6:
- 引入了 日志系统改进 (基于 Monolog)。
- 引入了 广播通道类 (
Illuminate\Broadcasting\Channel)。 - 动态速率限制 (
RateLimiter)。 - Eloquent 日期转换 (
$casts支持日期格式)。 - Blade 组件别名 (
@component('alert')=>@alert)。 - API 资源生成 (
php artisan make:resource默认生成集合)。 php artisan optimize命令被移除。
-
Laravel 5.7:
- 引入了 Laravel Nova (官方管理面板)。
- 引入了 授权门面 (
Gate::inspect(...))。 - 引入了 URL 生成器签名路由 (
URL::signedRoute,URL::temporarySignedRoute)。 - 引入了 Eloquent 资源方法映射 (
Resource::withoutWrapping)。 - 测试辅助方法 :
assertGuest,assertExactJson等。 - 分页链接定制 (
$paginator->onEachSide(3))。 - 通知邮件主题定制 (
$notification->subject())。 - Artisan
make:factory命令。
-
Laravel 5.8:
- 引入了 Eloquent 关联方法自动完成 (IDE 友好)。
- 引入了 任务调度时区配置 (
->timezone('America/New_York'))。 - Eloquent 日期序列化格式定制 (
serializeDate方法)。 - Artisan
serve命令支持自定义端口 (--port)。 (虽然 5.4 就有--port,但 5.8 文档明确提及) - Eloquent 支持
hasOne/hasMany的withDefault方法。 - Blade 组件参数 (
@component('alert', ['type' => 'danger'])=>@alert(['type' => 'danger']))。 Carbon更新至 2.x 版本。- Eloquent 查询缓存 (
Cache::remember结合查询)。
总结
Laravel 5.x 系列是一个持续进化的框架,每个子版本都带来了重要的新特性和优化,涵盖了路由、中间件、Eloquent ORM、Blade 模板、任务调度、测试工具、前端工具链等多个方面。它极大地提高了开发者的生产力和应用性能,并引入了如 LTS、自动包发现、资源类、通知系统、Echo、Passport、Dusk、Mix 等标志性功能。选择哪个 5.x 子版本取决于项目需求(新项目建议使用最新稳定版本,维护项目需考虑 LTS 支持)。