php lts版本,Laravel 5.5 LTS 版本今天正式发布了!

20170901090002_656.png

Laravel 5.5 版本今天正式发布,该版本是下一代 LTS (Long Term Support) 版本,在功能特性上有重大改进和提升,就连 Laravel 框架作者 Taylor Otwell 自己也是在 Twitter 上对这一版本赞不绝口,甚为满意,下面就让我们先来一睹为快吧。

Whoops 扩展包

Laravel 4 中提供的 flip/whoops 再次回归,我们可以通过该扩展包在调试的时候进行优雅的堆栈信息追踪。

20170901090003_386.jpg

打印集合

另一个厉害的调试功能是集合打印方法:

Song::all()

->filter

->platinum

->dump()

->filter(function ($song) {

return $song->released_on >= \Carbon\Carbon::parse('-10 years');

})

->dd();

异常 渲染

如果定义了一个公共的”响应“方法,异常就可以以响应的形式进行渲染。

在之前早期的 Laravel 版本中,要实现这一功能,你可以添加一个检查到 App\Exceptions\Handler::render() 方法,并基于异常类型发送响应。

在 Laravel 5.5 中,你只需要抛出异常,无需在处理器中添加任何逻辑就可以返回响应:

// 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 接口

实现了这个接口的类可以从控制器方法中返回;路由会在 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 接口的 NewSongResponse 类代码:

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 路由。

请求 验证 方法

在之前的版本中,你可以传递请求实例到某个控制器的 $this->validate() 方法:

$this->validate(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',

]);

这种风格调用验证方法的另一个好处是返回值就像 Request::only() ,只返回验证调用中提供的字段。只返回验证字段的使用起来很方便,从而避免了 Request::all() 。

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

我个人最喜欢的新特性是新的自定义验证规则对象和闭包,创建自定义规则对象是通过 Validator::extend 创建自定义规则之外的另一种方法,不过这种单独定义的好处是规则逻辑看上去更加清晰。下面是一个示例:

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!';

}

}

下面是使用上述验证规则的示例:

request()->validate([

'cowbells' => [new CowbellValidationRule],

'more_cowbells' => [function ($attribute, $value, $fail) {

if ($value <= 10) {

$fail(':attribute needs more cowbell!');

}

}]

]);

闭包风格的验证规则需要传入属性名和值,以及一个失败参数用于验证失败的场景。在你最终将自定义验证逻辑提取到专门的规则对象之前,闭包是一个很好的实验方式,或者用作一次自定义验证需要。

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

$ php artisan make:rule MyCustomRule

已登录和游客Blade指令

Laravel 5.5 新提供了条件指令 @auth 和 @guest ,在此之前,要在 Blade 模板中检查用户是否登录,需要这么做:

@if(auth()->check())

{{ -- 已登录 --}}

@endif

@if(auth()->guest())

现在你可以这么做来实现同样的功能:

@auth

Welcome {{ user()->name }}!

@endauth

@guest

Welcome Guest!

@endguest

前端 预置

当你创建一个新项目的时候,Laravel 5.5 默认为你提供了 Vue.js 脚手架。在 Laravel 5.5 中你现在可以从预置组件中挑选一些你所需要的,然后通过 Artisan 命令 preset 移除所有其他前端脚手架。

如果你查看帮助,可以看到可以选择 “none”,”bootstrap”,”vue” 或者 “react”:

php artisan help preset

Usage:

preset

Arguments:

type The preset type (none, bootstrap, vue, react)

# Use react

$ php artisan preset react

# Clear scaffolding

$ php artisan preset none

分离工厂文件

之前版本的 Laravel 工厂文件都是定义在一个 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

Laravel 5.5 新提供的 migrate:fresh 命令在开发中可以很方便的用于创建新的干净的数据库环境,该命令会将数据库中的所有数据表都删除然后运行所有迁移文件。

你可能之前对 migrate:refresh 命令很熟悉,它是用于回滚所有迁移然后重新运行。不过在开发过程中你通常只是想删除数据表,获得一个干净的数据库,然后再运行迁移。

更多

更多新特性及其使用细节,可关注官方文档,也可以追接下来 Laravel 学院为你提供的全新 Laravel 5.5 中文文档,我们将不在纯翻译官方文档,而是以示例化教程的方式尽可能让你学会每一个知识的细节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值