1、序言 —— 发行版本说明

1、支持政策

对于 LTS 版本,比如 Laravel 5.1,我们将会提供为期两年的 bug 修复和三年的安全修复支持。LTS 版本将会提供最长时间的支持和维护。

对于其他通用版本,只提供六个月的 bug 修复和一年的安全修复支持,比如 Laravel 5.2

2、Laravel 5.2

Laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持、隐式模型绑定、简化Eloquent 全局作用域、可选择的认证脚手架、中间件组、访问频率限制、数组输入验证优化等等。

多认证驱动

在之前的 Laravel 版本中,框架只支持默认的、基于 session 的认证驱动,且在单个应用中只能拥有一个认证模型类(对应单张表),这为我们实现某型功能,比如前后端分离登录带来麻烦。

我们对此进行了改进,在 Laravel 5.2 中,你可以定义多个认证驱动,还有多个认证模型以及用户表,并且可以独立控制其认证处理(登录、注册、密码重置)。例如,如果你的应用包含一个后台管理员用户表和一个前台学生用户表,现在你可以使用 Auth 门面来实现后台用户和学生用户的独立登录而不相互影响。

认证脚手架

通过多认证驱动,Laravel 可以轻松处理后台用户认证;此外,Laravel 5.2 还提供了便捷的方式来创建前台认证视图,只需在终端执行如下 Artisan 命令即可:

php artisan make:auth

该命令会生成纯文本的、兼容 Bootstrap 样式的视图用于登录、注册和密码重置。该命令还会使用相应路由更新路由文件。

注意:该功能特性只能在新应用中使用,不能再应用升级过程中使用。

隐式模型绑定

隐式模型绑定使得在路由或控制器中直接注入相应模型实例更加便捷。假设你有一个路由定义如下:

use App\User;

Route::get('/user/{user}', function (User $user) {
    return $user;
});

在 Laravel 5.1 中,你需要通过 Route::model 方法告诉 Laravel 注入 App\User 实例以匹配路由定义中的 {user} 参数。

现在,在 Laravel 5.2 中,框架将会基于相应 URI 片段自动注入模型,从而允许你快速访问需要的模型实例。

如果路由参数片段 {user} 匹配路由闭包或控制器方法中相应变量 $user,并且被类型声明为一个 Eloquent 模型类的话,Laravel 将会自动注入该模型。

更多隐式模型绑定详情请查看 Laravel 5.2 文档 HTTP 路由模型绑定部分

中间件组

中间件组允许你通过单个方便的键来对相关路由中间件进行分组,从而为某个路由一次指定多个中间件。例如,在同一个应用中构建 Web UI 或 API 时这一特性很有用,你可以将 session 和 csrf 路由分组到一个 web 组,或者将访问频率限制分组到 api 中。

实际上,默认的 Laravel 5.2 应用结构采用的正是这个方法。例如,在默认的 App\Http\Kernel.php 文件中你会看到如下内容:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

然后,web 组像这样分配给路由:

Route::group(['middleware' => ['web']], function () {
    //
});

访问频率限制

一个新的访问频率限制中间件已经被内置到框架中,从而允许你轻松限制给定 IP 地址在指定时间内对某个路由发起请求的数目。例如,要限制某个 IP 地址每分钟只能访问某个路由 60 次,你可以这么做:

Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
    //
}]);

数组输入验证

在 Laravel 5.2 可轻松实现表单字段的数组输入验证。例如,要验证给定数组输入字段中的每一个 email 是唯一的,可以这么实现:

$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users'
]);

同样,你可以在语言文件中使用 * 来指定验证数组字段:

'custom' => [
    'person.*.email' => [
        'unique' => 'Each person must have a unique e-mail address',
    ]
],

Eloquent 全局作用域优化

在之前的 Laravel 版本,Eloquent 全局作用域的实现是复杂且容易出错的,但在 Laravel 5.2 中,全局查询作用域只需实现一个简单的方法 apply 即可。

关于全局作用域详情请查看全局作用域文档