发行版本说明
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后台界面功能,允许用户创建客户端、撤销访问令牌,以及更多其他功能:
<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期间被请求的访问令牌域变得简单:
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到模型让模型变得可搜索:
<?php
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'); });
查看完整的Laravel Elixir文档了解更多信息。
前端架构
注: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
<p>This is user {{ $user->id }}</p>
@endforeach
更多详情请查看完整的Blade文档。
3、早期版本
更多早期版本发行说明:
12 Comments