发行说明
支持策略
对于 LTS 版本,比如 Laravel 5.1,会提供为期两年的 bug 修复和三年的安全修复支持。LTS 版本是 Laravel 能提供的维护时间最长的发行版。
对于其他通用版本,只提供六个月的 bug 修复和一年的安全修复支持。
Laravel 的发布路线图 - by Summer
Laravel 5.3
Laravel 5.3 在 5.2 基础上进行了优化,新特性包括以下:
- 消息通知 Laravel Notifications;
- 事件广播 Laravel Echo;
- OAuth2 授权认证 Laravel Passport;
- 全文搜索引擎 Laravel Scout;
- Laravel Elixir 开始支持 Webpack;
- Mail 操作类 Laravel Mailable;
web
和api
的路由分离;- 基于闭包的控制台命令;
- 更加易用的辅助函数,用于存储上传的文件;
- 支持 POPO 和单动作控制;
- 优化默认的前端脚手架 ,等等。
消息通知
Laravel Notifications 提供了简单、优雅的 API 支持你通过不同的渠道发送通知,例如电子邮件、Slack、手机短信等等。
例如,你可以定义一个单据,当该单据被付款后,则通过邮件和手机短信发送提醒通知:
你可用通过下面这个简单的方法来实现:
$user->notify(new InvoicePaid($invoice));
Laravel 社区 已经为通知系统编写了各式的驱动,甚至包括对 iOS 和 Android 通知的支持,更多关于通知系统的信息,请查看 完整的文档。
WebSockets / 事件广播
事件广播在之前版本的 Laravel 中已经存在,Laravel 5.3 现支持对私有和已存在的 WebSocket 频道添加频道级认证:
/*
* 频道认证
*/
Broadcast::channel('orders.*', function ($user, $orderId) {
return $user->placedOrder($orderId);
});
Laravel Echo 是一个可通过 NPM 安装的全新的 JavaScript 包,会随 Laravel 5.3 一起发布。Echo 提供了简单、优雅的 API 接口,支持你在 JavaScript 客户端应用中,订阅频道和监听服务器端事件。
Echo 提供的支持包括 Pusher 以及 Socket.io:
Echo.channel('orders.' + orderId)
.listen('ShippingStatusUpdated', (e) => {
console.log(e.description);
});
除了订阅到传统频道上,Laravel Echo 也让频道的监听与管理变得更加简单:
Echo.join('chat.' + roomId)
.here((users) => {
//
})
.joining((user) => {
console.log(user.name);
})
.leaving((user) => {
console.log(user.name);
});
了解更多关于 Echo 和事件广播的信息,请查阅 完整文档.
Laravel Passport (OAuth2 认证服务)
Laravel 5.3 的 Passport 让 API 认证变得简单。Laravel Passport 可以让你在几分钟内为应用程序创建一个完整的 OAuth2 认证服务,Passport 基于 Alex Bilbie 的 League OAuth2 server 实现。
Passport 让发放 OAuth2 令牌(Access Token)变得轻松,你还可以允许用户通过 Web 界面创建 个人访问令牌
。
为了方便提高开发效率,Passport 内置了一个 Vue 组件,该组件提供了 OAuth2 后台界面功能,允许用户创建客户端、撤销访问令牌,以及更多其他功能:
<passport-clients></passport-clients>
<passport-authorized-clients></passport-authorized-clients>
<passport-personal-access-tokens></passport-personal-access-tokens>
如果你不想使用 Vue 组件,你可以自由的定制用于管理客户端和访问令牌的前端及后台。Passport 提供了一个简单的 JSON API,你可以在前端使用任何 JavaScript 框架与之集成。
Passport 还提供了方便的 API 让 你定制「Token 访问域」:
Passport::tokensCan([
'place-orders' => 'Place new orders',
'check-status' => 'Check order status',
]);
此外,Passport 还包含了一个用于检查「Token 访问域」访问权限的中间件:
Route::get('/orders/{order}/status', function (Order $order) {
// 检查令牌是否拥有 "check-status" 访问域
})->middleware('scope:check-status');
最后,Passport 还支持 从 JavaScript 应用访问你的 API,而不必担心访问令牌传输。
Passport 通过加密 JWT cookies 和同步「CSRF 令牌」来实现此功能,让你专注于业务开发。
更多关于 Passport 信息,请查看 完整文档。
搜索系统 Laravel Scout
Laravel Scout 提供了一个简单的、基于驱动的、针对 Eloquent 模型的全文搜索解决方案。
通过模型观察者,Scout 会自动同步更新 Eloquent 的搜索索引,目前,Scout使用 Algolia 驱动,你可以自由的编写自己驱动来扩展 Scout。
你只需要添加 Searchable trait 到模型中,就能让模型支持搜索:
<?php
namespace App;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use Searchable;
}
在你在模型中添加 trait 以后,数据会在 save
的时候自动保持同步:
$order = new Order;
// ...
$order->save();
在模型被成功索引以后,可以很轻松的使用全文搜索,你甚至可以为索引的结果进行分页操作:
return Order::search('Star Trek')->get();
return Order::search('Star Trek')->where('user_id', 1)->paginate();
更多 Scout 功能,请查阅 Scout 的完整文档。
Mailable 对象
Laravel 5.3 Mailable 是一个崭新的 Mail 操作类,通过一种更加优雅的方式发送 邮件,而不再需要在闭包中自定义邮件信息。
例如,定义一个简单的邮寄对象用作发送欢迎邮件:
class WelcomeMessage extends Mailable
{
use Queueable, SerializesModels;
/**
* 新建消息
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome');
}
}
Mailable 对象被创建以后,你可以使用一个简单、优雅的 API 将其发送给用户:
Mail::to($user)->send(new WelcomeMessage);
Mailable 还支持队列操作,只需要在类声明里实现 ShouldQueue
即可:
class WelcomeMessage extends Mailable implements ShouldQueue
{
//
}
更多关于 Mailable 的信息,请查看 完整文档。
存储上传文件
存储用户上传文件,在 Web 开发中是一个很常见的任务。
Laravel 5.3 提供了一个便捷的 store
方法,只需要对上传文件对象调用此方法,并传参准备存储的路径即可:
/**
* 更新用户头像
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars', 's3');
return $path;
}
更多上传文件信息,请查看 完整文档。
Webpack 和 Laravel Elixir
Laravel Elixir 6.0 与 Laravel 5.3 共同发布,内置了 Webpack 和 Rollup JavaScript。
默认情况下,Laravel 5.3 的 gulpfile.js
使用 Webpack 来编译你的 JavaScript 文件:
elixir(mix => {
mix.sass('app.scss')
.webpack('app.js');
});
完整文档请见 Laravel Elixir 。
前端架构
Laravel 5.3 提供了一个更加现代的前端架构。这主要会影响 make:auth
命令生成认证相关的前端脚手架代码,不再从 CDN 中加载前端资源,所有依赖被定义在默认的 package.json 文件中,你可以自行修改。
此外,支持单文件的 Vue 组件 现在直接开箱即用, resources/assets/js/components
目录下包含了一个简单的示例 Example.vue
,新的 resources/assets/js/app.js
用来配置 JavaScript 类库依赖和 Vue 子模块。
这种架构对开始开发现代的、强大的 JavaScript 应用提供了更好的支持,而不需要要求应用使用任何特定 JavaScript 或者 CSS 框架。
更多信息,请查看对应文档 前端文档。
路由文件
默认情况下,新安装的 Laravel 5.3 应用在新的顶级目录 routes
下包含了 web.php
和 api.php
两个 HTTP
路由文件,你也可以按照此方法自行扩展。
API 相关的路由在 RouteServiceProvider
中指定了自动添加 api
前缀。