Laravel 5.8 前瞻

file

无论是从零开始创建新项目还是升级现有的项目,你都应该了解一下 Laravel 5.8 的新特性和变化。

Laravel 5.0 发布于 2015 年 2 月,从那时起大约每六个月会发布一次 5.x 的新版本。上一个版本(Laravel 5.7)于 2018 年 9 月发布,因此我们预计可以在 2019 年 3 月左右看到 Laravel 5.8的发行版。

当你创建一个新项目或升级现有的项目时,你应该注意到 Laravel 5.8中的新功能和一些重要的变更,在本文中,我们会为你快速的介绍一遍。

和往常一样,在升级 Laravel 版本之前,请务必仔细阅读并理解 升级指南,以确保升级过程的顺利。

下面,让我们一起了解一下Laravel 5.8 中的一些重要更新。

邮箱字段验证:

在 Laravel 5.8 中内置的email 验证规则将支持国际字符

如果你的项目中有如下表单验证规则:

$request->validate([ 'email' => 'email', ]);

并尝试验证邮箱hej@bär.se,在5.7及以前版本中,验证会失败,但是在5.8中将能通过验证。

5.7版本中表单验证逻辑与 SwiftMailer(Laravel使用的PHP mailer库) 的逻辑并不匹配,但是现在它们都符合 RFC6530 规范。

dotenv 3.0:

Laravel 5.8 将会支持 相对较新 的 dotenv 3.0 来管理项目中的 .env 环境文件。

dotenv 3.0 中的关键更新是支持环境文件中支持多行字符串和保留字符串末尾的空格,例如:

DEVELOPMENT_APP_KEY="specialstringfor
thisapp"

在之前的版本中,这仅会返回 specialstringfor,但在 Laravel 5.8 里,
它会解析整个 specialstringfor thisapp。新版本还会保留字符串末尾的空格,而在之前的版本里,空格会被忽略。

对于需要多行 API 秘钥以提高安全性的场景来说,这是一个很棒的更新。

更改 Mailables 的目录名称:

这不是一个新功能,而是升级项目时需要注意的重要关键点。

如果您的项目中有可填写的东西,并且您使用 php artisan vendor:publish 命令定制了组件,则文件夹名称稍有变化,即 /resources/views/vendor/mail/markdown 目录现在名为 /resources/views/vendor/mail/text 。 这是因为两个文件夹都可以包含 markdown 代码,用于制作带有纯文本的漂亮响应式的 html 模板。 调用 markdown 文件夹文本更合乎逻辑。

新的错误页面模板:

Laravel 5.8 将附带新的错误页面,其中包含极简主义的设计,旨在更适合各种网站和网络应用程序,而无需重新设计以适应主题。

file

Laravel 5.7 404 视图 「上面」 和 5.8 404 视图 「下面」

如果你愿意,仍然可以自定义错误页面或者导入以前的设计(请查看 自定义laravel错误页面的教程)。

弃用 Array 和 String 辅助函数:

所有的 array_ *str_ * 全局辅助函数都已弃用,将在 Laravel 5.9 中删除。 应该使用 Arr ::Str :: 方法。 如果您不能或不想重新编写现有的代码和有可用于维护功能的软件包,但如果您需要使用它们,现在习惯于使用新的命令行是一种好习惯。

当前版本搜索 array_* 方法:

function array_add($array, $key, $value)

应该换成:

Arr::add($array, $key, $value)

当前版本搜索 str_* 方法:

function str_contains($haystack, $needles)

应该换成:

Str::contains($haystack, $needles);

事实上,如果 你检查了 array * 和 str * 全局助手函数的 5.8 代码 ,你会看到 他们已经使用了静态代理版本了。

Caching --- 过期时间(ttl)现在是以秒钟而不是分钟来描述:

请注意,如果你正在使用 Laravel 的缓存组件,当你传入一个 integer 型的 ttl 参数给缓存函数时,5.8 中会被设置为以秒为单位生存时间,而不是 5.7 中的分钟,例如:

Cache::put('foo', 'bar', 30);

Laravel 5.7 中,foo 会被存储 30 分钟,而在 5.8 里仅仅会存储30秒。这是一个简单但 非常重要 的更新。

MySQL 中的 JSON 值:

如果您在 MySQL 和 MariaDB 数据库列中存储 JSON 值,则在 5.7 Laravel 中将返回用双引号括起来的值。 5.8 将返回更干净的相同值。

以下是 Laravel 升至指南中说明更改的示例:

$value = DB::table('users')->value('options->language');

dump($value);

// Laravel 5.7...
'"en"'

// Laravel 5.8...
'en'

Carbon 2 的版本支持

您现在可以选择在 Laravel 5.8 中使用 Carbon 1 或 Carbon 2 作为 DateTime 函数。点击这里 Carbon migration guide 来确定你是否真的要启用 Carbon 2。

Nexmo 和 Slack Notification 通知:

Nexmo 和 Slack Notification 通知已从 Laravel 主项目中删除,并提取到第三方软件包中。

要在项目中继续使用 Slack 或 Nexmo 功能,您需要使用:

composer require laravel/nexmo-notification-channel
composer require laravel/slack-notification-channel

然后可以像以前一样配置和使用它们。

所以这几乎涵盖了你应该注意的关键变化。我们总是喜欢在 Welcm Software 上查看新的软件版本,并期待很快发布 5.8 版本。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@welcm/whats-new-in-l...

译文地址:https://learnku.com/laravel/t/24324

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10
leo

之前的缓存单位是分钟真的是一个 zz 设计啊

5年前 评论

之前的 过期时间(ttl)单位是分钟真的是一个特别傻的设计啊

5年前 评论

下一个 LTS 版本是什么?

5年前 评论

@wujunze 被坑过。只怪自己看文档没看仔细。

5年前 评论
Artisan

感觉没有什么特别惊艳的更新

5年前 评论
幽弥狂

@raykwok 同问

5年前 评论

没注意之前laravel的缓存组件竟然用的TM是分钟。。。

5年前 评论

@leo 我也这么觉得,之前我想要缓存6s钟都是要转换成小数

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!