发行版本说明
由 学院君 创建于4年前, 最后更新于 11个月前
版本号 #2
23296 views
12 likes
0 collects
1、支持政策
对于 LTS 版本,比如 Laravel 5.1,我们将会提供为期两年的 bug 修复和三年的安全修复支持。LTS 版本将会提供最长时间的支持和维护。
对于其他通用版本,只提供六个月的 bug 修复和一年的安全修复支持,比如 Laravel 5.3。
2、Laravel 5.3
Laravel 5.3 在 5.2 的基础上继续进行优化,提供了大量新功能和新特性:基于驱动的通知系统;通过Laravel Echo提供强大的实时支持;通过Laravel Passport实现无痛的OAuth2服务器;通过Laravel Scout实现全文模型搜索;在Laravel Elixir中支持Webpack;“可邮寄”的对象;明确分离web和api路由;基于闭包的控制台命令;存储上传文件的辅助函数;支持POPO和单动作控制器;以及优化前端脚手架;等等等等。
通知(Notifications)
注:Laracasts上有关于此特性的免费视频教程。
Laravel Notifications 为我们提供了简单、优雅的API用于在不同的发行渠道中发送通知,例如邮件、SMS、Slack等等。例如,你可以定义一个单据已经支付的通知,然后通过邮件和SMS发送这个通知,你可以使用一个很简单的来实现:
$user->notify(new InvoicePaid($invoice));
Laravel社区已经为通知系统编写了各种各样的驱动,包括对iOS和Android通知的支持,要学习更多关于通知系统的细节,查看其相应文档。
WebSockets/事件广播
事件广播在之前版本的Laravel中已经有了,Laravel 5.3 通过为已私有和已存在的 WebSocket 频道添加频道级认证对此功能进行了极大的优化和提升:
/*
* Authenticate the channel subscription...
*/
Broadcast::channel('orders.*', function ($user, $orderId) {
return $user->placedOrder($orderId);
});
Laravel Echo,通过NPM安装的全新的JavaScript包,将和Laravel 5.3一起发布,用于为订阅频道以及在客户端JavaScript应用中监听服务器端事件提供了简单、优美的API,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 服务器)
注:Laracasts上提供了关于这一新特性的免费视频教程。
Laravle 5.3 使用Laravel Passport让API认证变得简单。Laravel Passport可以在几分钟内为应用提供一个完整的Oauth2服务器实现,Passport基于 Alex Bilbie维护的 League OAuth2 server 实现。
Passport使得通过OAuth2授权码获取访问令牌(access token)变得轻松,你还可以允许用户通过Web UI创建“个人访问令牌”。为了让你更快上手,Passport内置了一个Vue组件,该组件提供了OAuth2后台界面功能,允许用户创建客户端、撤销访问令牌,以及更多其他功能:
如果你不想使用Vue组件,欢迎提供你自己的用于管理客户端和访问令牌的前端后台。Passport提供了一个简单的JSON API,你可以在前端使用任何JavaScript框架与之集成。
当然,Passport还让定义可能在应用消费你的API期间被请求的访问令牌域变得简单:
Passport::tokensCan([
'place-orders' => 'Place new orders',
'check-status' => 'Check order status',
]);
此外,Passport还包含了用于验证访问令牌认证请求包含必要令牌域的中间件:
Route::get('/orders/{order}/status', function (Order $order) {
// Access token has "check-status" scope...
})->middleware('scope:check-status');
最后,Passport还支持从JavaScript应用访问你的API,而不必担心访问令牌传输,Passport通过加密JWT cookies和同步CSRF令牌来实现这一功能,从而让开发者专注于业务开发。
想要学习更多Passport细节,请查看其文档。
搜索(Laravel Scout)
Laravel Scout 提供了一个简单的、基于驱动的针对Eloquent模型的全文搜索解决方案。通过模型观察者,Scout会自动同步更新Eloquent记录的搜索索引,目前,Scout使用 Algolia 驱动,不过,编写自己的驱动很简单,你可以通过自己的搜索实现扩展Scout。
你可以简单通过添加 Searchable trait到模型让模型变得可搜索:
namespace App;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use Searchable;
}
trait被添加到模型之后,当保存模型实例的时候其信息将会被同步到搜索索引:
$order = new Order;
// ...
$order->save();
模型被索引之后,就可以通过模型进行全文搜索了,甚至还可以对搜索结果进行分页:
return Order::search('Star Trek')->get();
return Order::search('Star Trek')->where('user_id', 1)->paginate();
当然,Scout还有很多其他特性,具体请查看其文档。
可邮寄对象
注:Laracasts上有关于该特性的免费视频教程。
Laravel 5.3支持可邮寄对象,这些对象可以以一个简单对象的形式表示邮件信息,而不再需要在闭包中自定义邮件信息,例如,你可以定义一个简单的邮寄对象用作欢迎邮件:
class WelcomeMessage extends Mailable
{
use Queueable, SerializesModels;
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome');
}
}
可邮寄对象被创建以后,你可以使用一个简单、优雅的API将其发送给用户。可邮寄对象可以在浏览代码的同时了解邮件信息:
Mail::to($user)->send(new WelcomeMessage);
当然,你还可以标记可邮寄对象为“队列化”,这样这封邮件就会在后台通过队列任务发送:
class WelcomeMessage extends Mailable implements ShouldQueue
{
//
}
更多可邮寄对象细节请查看其对应文档。
存储上传文件
注:Laracasts上有关于该特性的免费视频教程。
在web应用中,最常见的任务之一就是保存用户上传文件了,比如头像、照片、文档等等。Laravel 5.3通过在上传文件实例上使用新的 store 方法让这一工作变得简单。只需要简单调用 store 方法并传入文件保存路径即可:
/**
* Update the avatar for the user.
*
* @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');
});
前端架构
注:Laracasts有关于本特性的免费视频教程。
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前端开发,请查看对应文档。
路由文件
默认情况下,新安装的Laravel 5.3应用在新的顶级目录routes下包含两个HTTP路由文件。web和api路由文件在如何分割Web界面和API路由方面提供了指导。api路由文件中的路由会通过 RouteServiceProvider 自动添加api前缀和auth:api中间件。
闭包控制台命令
除了通过命令类定义之外,现在Artisan命令还可以在 app/Console/Kernel.php 文件的 commands 方法中以简单闭包的方式定义。在新安装的Laravel 5.3应用中, commands 方法会加载 routes/console.php 文件,从而允许你基于闭包、以路由风格定义控制台命令:
Artisan::command('build {project}', function ($project) {
$this->info('Building project...');
});
更多详情请查看完整的Artisan文档。
$loop变量
注:Laracasts中有关于此特性的免费视频教程。
当我们在Blade模板中循环遍历的时候,$loop变量将会在循环中生效。通过该变量可以访问很多有用的信息,比如当前循环索引值,以及当前循环是第一个还是最后一个迭代:
@foreach ($users as $user)
@if ($loop->first)
This is the first iteration.
@endif
@if ($loop->last)
This is the last iteration.
@endif
This is user {{ $user->id }}
@endforeach
更多详情请查看完整的Blade文档。
3、早期版本
更多早期版本发行说明: