新版特性
Laravel 5.7 在 Laravel 5.6 的基础上继续进行优化,包括引入 Laravel Nova,认证脚手架中可选的邮箱验证,支持针对未登录用户的授权,集成 Symfony dump-server
,本地化通知,以及多个 bug 修复和可用性的提升。
Laravel Nova
Laravel Nova 是一个专门为 Laravel 应用打造的、美观的、一流的后台管理面板,当然,Nova 的核心功能还是通过 Eloquent 管理底层数据库记录,不过在这个核心功能之上,Nova 还支持过滤器、透镜、动作、动作队列、授权、自定义工具、自定义卡片、自定义字段等额外功能。
要了解更多关于 Laravel Nova 的内容,请参考 Nova 官网。
邮箱验证
Laravel 5.7 为 Laravel 框架自带的认证脚手架代码引入了邮箱验证功能,为了实现这个功能,框架自带的 users
表迁移还新增了一个时间戳字段 email_verified_at
。
如果想提示新注册用户验证他们的邮箱,User
模型类需要实现 MustVerifyEmail
接口:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
// ...
}
一旦 User
模型类标记实现 MustVerifyEmail
接口,新注册的用户将会收到一封邮件,其中包含已签名的验证链接,点击这个链接,Laravel 将会自动在数据库中记录验证时间并将用户重定向到你设置的页面。
此外,默认 HTTP kernel 中还新增了一个 verified
中间件,用于过滤那些未验证邮箱的用户:
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
注:要了解更多关于邮箱验证的实现细节,请参考完整文档。
未登录用户授权
在之前版本的 Laravel 中,对于未登录访客的权限判断,无论是 Gate 还是 Policy,都会自动返回 false
。不过,在 Laravel 5.7 中,你可以通过声明一个可选的类型提示或者将用户参数定义默认设置为 null
,以便访客可以通过授权检查:
Gate::define('update-post', function (?User $user, Post $post) {
// ...
});
Symfony Dump Server
Laravel 5.7 通过引入扩展包 Laravel Dump Server 在 Laravel 应用中集成了 Symfony 的 dump-server
命令。只需通过运行如下 Artisan 命令就可以启用:
php artisan dump-server
一旦服务器启动,所有对 dump
函数的调用结果将会输出到 dump-server
控制台窗口,而不是显示在浏览器中,从而允许开发者在不打乱 HTTP 响应输出的情况下检查某些值。
通知本地化
Laravel 5.7 允许开发者通过本地化语言发送通知,甚至能够在通知队列中记住本地化设置。
为了实现这个功能,Illuminate\Notifications\Notification
类新增了一个 locale
方法来设置期望语言,应用会在通知被格式化时切换到 locale
设置语言,并在格式化完成后切换回之前的语言:
$user->notify((new InvoicePaid($invoice))->locale('es'));
还可以通过 Notification
门面来本地话多个通知实体:
Notification::locale('es')->send($users, new InvoicePaid($invoice));
URL 生成器 & 可调用语法
除了只接收字符串外,Laravel 的 URL 生成器现在还可以在生成指向控制器动作的URL时接收「可调用」语法:
action([UserController::class, 'index']);
分页器链接
Laravel 5.7 允许开发者控制在每个分页器 URL 窗口中主分页(当前页码)左右各显示多少个额外的链接,默认情况下,在主分页器链接左右各显示三个链接,不过,你可以通过使用 onEachSide
方法里控制这个数值:
{{ $paginator->onEachSide(5)->links() }}
文件系统读写流
Laravel 的文件系统现在集成了 readStream
和 writeStream
方法:
Storage::disk('s3')->writeStream(
'remote-file.zip',
Storage::disk('local')->readStream('local-file.zip')
);
7 Comments
速度感人
function (?User $user, Post $post) {}
中 ? 是PHP语法,还是Laravel框架的 ,不懂。。。Laravel 是基于 PHP 的,肯定是 PHP 支持的语法了
请问Laravel Nova是需要付费的吗?貌似有版权。另外,composer global update之后依然Could not find package laravel/laravel with version 5.7.*,只能安装5.6的。
嗯 5.7暂时还没有正式发布 Laravel Nova 等文档翻译完了出一篇教程来专门讨论下
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。 当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。
这是PHP7.0新特性的写法,这样可以提高性能。