Laravel 5.5 LTS 现已发布

发表于 作者:

Laravel 5.5 LTS is Now Released image

Laravel 5.5 版本现已正式发布!此版本充满了新功能和改进,以下是一个快速视频总结了主要功能

Taylor Otwell 最近在推特上描述了他对 Laravel 5.5 的想法

明天离开参加 @LaraconEU。下周发布 5.5。最喜欢的版本。喜欢框架现在的形态。从来没有像现在这样高兴。 ????

— Taylor Otwell (@taylorotwell) 2017 年 8 月 25 日

Laravel 5.5 是下一个 LTS 版本

Laravel 5.5 是 Laravel 的下一个长期支持 (LTS) 版本(上一个 LTS 版本是 5.1)。LTS 版本在两年内提供 bug 修复,三年内提供安全修复。

常规次要版本在六个月内提供 bug 修复,一年内提供安全修复。

Whoops 包

您可能还记得 Laravel v4 中的 filp/whoops 包,它为最令人沮丧的调试时刻提供了优雅的堆栈跟踪。Whoops 包在 Laravel 5.5 中回归!

集合转储

另一个很棒的调试功能(我之前曾在包或宏中见过)是集合转储方法

<?php
 
Song::all()
->filter
->platinum
->dump()
->filter(function ($song) {
return $song->released_on >= \Carbon\Carbon::parse('-10 years');
})
->dd();

阅读我们的 集合转储文章 以了解更多详细信息。

异常渲染

异常现在可以渲染响应,如果它们定义了公共的“response”方法。通常,在早期版本的 Laravel 中,您可能会在 App\Exceptions\Handler::render() 方法中添加一个检查,并根据异常类型有条件地发送回响应。

在 5.5 中,您可以直接抛出异常,并且它可以在没有处理程序中添加额外逻辑的情况下进行响应

<?php
 
// throw new TerribleSongException($song) in a controller...
 
namespace App\Exceptions;
 
use App\Song;
 
class TerribleSongException extends \Exception
{
/**
* @var \App\Song
*/
protected $song;
 
public function __construct(Song $song)
{
$this->song = $song;
}
 
/**
* @param \Illuminate\Http\Request $request
*/
public function render($request)
{
return response("The song '{$this->song->title}' by '{$this->song->artist}' is terrible.");
}
}

您也可以在异常类中实现 Responsable 接口,Laravel 将自动响应。

Responsable 接口

Responsable 接口是 Laravel 中的另一个响应添加内容 我们曾在 Laravel 新闻中介绍过。实现此接口的类可以从控制器方法中返回;路由器现在在从 Illuminate\Routing\Router 准备响应时检查 Responsable 的实例。

以下是一个示例,将响应详细信息留给 NewSongResponse 对象

public function store(Request $request)
{
$data = request()->validate([
'title' => 'required',
'artist' => 'required',
'description' => 'required',
'duration' => 'required|numeric',
'released_on' => 'required|date_format:Y-m-d',
'gold' => 'boolean',
'platinum' => 'boolean',
]);
 
$song = new Song($data);
$song->save();
 
return new NewSongResponse($song);
}

以下是如何实现 Responsable 接口以创建新歌曲的类的示例

<?php
 
namespace App\Http\Responses;
 
use App\Song;
use Illuminate\Contracts\Support\Responsable;
 
class NewSongResponse implements Responsable
{
/**
* @var \App\Song
*/
protected $song;
 
/**
* @param \App\Song $song
*/
public function __construct(Song $song)
{
$this->song = $song;
}
 
public function toResponse($request)
{
if ($request->wantsJson()) {
return response()
->json($this->song)
->header('Location', route('songs.show', $this->song))
->setStatusCode(201);
}
 
return redirect()
->route('songs.show', $this->song);
}
}

在此简单示例中,如果通过 AJAX 进行请求,您可以自动使用 JSON 进行响应,默认情况下,可以使用重定向到 songs.show 路由进行响应。

请求验证方法

在过去版本的 Laravel 中,您会将请求实例传递给控制器中的 $this->validate() 方法

$this->validate(request(), [...]);

现在,您只需在请求对象上调用 validate

$data = request()->validate([
'title' => 'required',
'artist' => 'required',
'description' => 'required',
'duration' => 'required|numeric',
'released_on' => 'required|date_format:Y-m-d',
'gold' => 'boolean',
'platinum' => 'boolean',
]);

此调用验证风格的另一个好处是,返回值就像 Request::only() 一样,只返回验证调用中提供的键。只返回验证过的键是一个很好的约定,避免使用 Request::all()

自定义验证规则对象和闭包

我最喜欢的 Laravel 5.5 功能无疑是新的自定义验证规则对象和闭包。创建自定义规则对象是使用 Validator::extend 创建自定义规则 (您仍然可以使用) 的绝佳替代方法,因为它更清晰地显示了规则逻辑的位置。验证规则对象可能如下所示

<?php
 
namespace App\Rules;
 
use Illuminate\Contracts\Validation\Rule;
 
class CowbellValidationRule implements Rule
{
public function passes($attribute, $value)
{
return $value > 10;
}
 
public function message()
{
return ':attribute needs more cowbell!';
}
}

使用此验证规则的示例如下

<?php
 
request()->validate([
'cowbells' => [new CowbellValidationRule],
'more_cowbells' => [function ($attribute, $value, $fail) {
if ($value <= 10) {
$fail(':attribute needs more cowbell!');
}
}]
]);

闭包风格采用属性和值,以及一个 fail 参数,如果验证规则应该失败,则调用它。闭包是实验自定义验证的好方法,然后再将其提取到专用规则对象,或者用于一次性的自定义验证需求。

要创建自定义验证规则对象,可以使用新的 make:rule 命令

$ php artisan make:rule MyCustomRule

我们有一篇专门介绍 自定义验证规则 的文章,请务必查看!

Auth 和 Guest Blade 指令

我们已经写过 5.5 中的 Blade::if() 指令。5.5 中的一些新的条件指令是 @auth@guest

通常,您可能会使用类似以下内容来检查 Blade 中是否已认证用户

@if(auth()->check())
{{ -- authenticated --}}
@endif
 
@if(auth()->guest())

您现在可以使用以下指令来实现相同的效果

@auth
Welcome {{ user()->name }}!
@endauth
 
@guest
Welcome Guest!
@endguest

前端预设

在开始一个新项目时,Laravel 5.5 默认提供 Vue.js 脚手架。在 Laravel 5.5 中,您现在可以选择几个预设,并使用 Laravel 5.5 中的“preset” Artisan 命令删除所有前端脚手架。

如果您查看帮助信息,您会发现它允许您选择“none”、“bootstrap”、“vue”或“react”

php artisan help preset
Usage:
preset <type>
 
Arguments:
type The preset type (none, bootstrap, vue, react)
 
# Use react
$ php artisan preset react
 
# Clear scaffolding
$ php artisan preset none

单独的工厂文件

工厂文件以前定义在一个 ModelFactory.php 文件中。现在,您可以为每个模型创建不同的文件。在创建新模型时,可以创建工厂文件

$ php artisan make:model -fm Post
 
# Or you can create a controller, migration, and factory
$ php artisan make:model --all

您也可以使用“make:factory”直接创建工厂文件

$ php artisan make:factory --model=Example ExampleFactory

migrate:fresh 迁移命令

5.5 中的新“migrate:fresh”迁移命令是开发中创建干净数据库的不错补充。migrate:fresh 命令会删除所有数据库表,然后运行迁移。

您可能熟悉现有的 migrate:refresh 命令,它会回滚迁移,然后重新运行它们。通常在开发中,您只希望删除表,获得一个新的数据库,并运行迁移。

RefreshDatabase 特性

在测试方面,RefreshDatabase 特性是在测试期间迁移数据库的新方法。此新特性会根据您是否使用内存数据库或传统数据库,采用最优的方式来迁移测试数据库。DatabaseTransactionsDatabaseMigrations 特性在 5.5 中仍然可用,允许您在不使用新的 RefreshDatabase 特性的情况下进行升级。

withoutExceptionHandling() 方法

基础测试用例继承了一个名为 withoutExceptionHandling() 的方法,它允许你禁用测试的异常处理。禁用异常处理允许你在测试中捕获异常并断言异常,而不是让异常处理程序响应。当你的测试做了你没有预期的操作时,这也是一个有用的调试工具,你想要看到实际的异常。

自动包发现

我们最后要看的功能是自动包发现。虽然 Laravel 包通常不难安装,但包检测功能意味着你不需要设置提供者或别名。你可以为特定包禁用自动发现。

Taylor Otwell 关于此功能的文章以及我们的帖子中了解更多关于此功能的信息。

了解更多关于 Laravel 5.5 的信息

请务必查看我们的Laravel 5.5内容,以深入了解。Laracasts 有一个关于所有这些功能的完整系列。此外,请查看官方文档发布说明以及升级指南

Paul Redmond photo

Laravel News 的撰稿人。全栈 Web 开发人员和作者。

Cube

Laravel 时事通讯

加入 40,000 多名其他开发人员,永远不要错过新的技巧、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理你的服务器,并在几秒钟内部署你的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和对本地和生产环境的即时反馈进行 Tinker。

Tinkerwell
No Compromises logo

No Compromises

来自 No Compromises 播客的两名经验丰富的开发人员 Joel 和 Aaron 现在可供你的 Laravel 项目聘用。 ⬧ 每月 7500 美元的固定费用。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

No Compromises
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保你的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,使你的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

让你的项目充满活力,只需每月 2500 美元,即可获得拥有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专业知识和 15 天的免费试用。立即安排通话!

Bacancy
Lucky Media logo

Lucky Media

现在就获得 Lucky - Laravel 开发的理想选择,拥有超过十年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的力量带到 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 职位招聘网站

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。支付、漂亮的结账、管理面板、用户仪表板、身份验证、准备好的组件、统计数据、博客、文档等等。

SaaSykit: Laravel SaaS 启动工具包
Rector logo

Rector

你的无缝 Laravel 升级、降低成本和加速创新,为成功公司提供成功的合作伙伴

Rector
MongoDB logo

MongoDB

通过强大的 MongoDB 和 Laravel 集成来增强你的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变你的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到你的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包在你的 Laravel 应用程序中添加评论

阅读文章