正文
昨天,就在 Laracon 线上会议开始之前, Taylor Otwell 发布了 Laravel 5.6 。在维也纳,我们参与了一个小型会议,一起愉悦地观看了所有演讲。在其中一个演讲过程中, Taylor 带我们浏览了 Laravel 的新功能,我将列出其中我最喜欢的三个。
1. Collision
Collision
是 Nuno Maduro 制作的包,现在已经是 Laravel 开发依赖的一部分。它是一个针对命令行应用的
错误处理框架
,构建于 Whoops 包之上。 Whoops 负责浏览器的错误处理逻辑,能够提供一份漂亮的发生事件概览。 Collision 完成同样的任务,只不过针对的是命令行应用。
简单的样例
假设我正在创建一个新的 Laravel 命令,用于删除一些旧的备份数据。现在这个命令的具体用途并不重要,它被命名为 BackupFlush,调用它的命令信号为
backupflush:doit
。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class BackupFlushCommand extends Command
{
/**
* 控制台命令的名称和信号。
*
* @var string
*/
protected $signature = 'backupflush:doit';
/**
* 控制台命令描述。
*
* @var string
*/
protected $description = 'Command description';
/**
* 创建一个新的命令实例。
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 执行控制行命令。
*
* @return mixed
*/
public function handle()
{
$this->doIt();
}
}
在命令的处理方法中,调用了一个不存在的方法
doIt
。我们将使用这个语句触发一个错误。让我们调用这个命令,看看会发生什么。
php artisan backupflush:doit
在使用 Collision 之前,输出的内容如下所示。
事实上,这里的错误信息已经相当具有描述性了。难道这还不够吗?对于我们这个小样例而言是足够的,但这是因为我们故意放置了这个错误,并且知道它的存在。否则,寻找被调用方法的位置将会非常困难。因此,这就是 Collision 能够帮助我们的地方,它将输出更漂亮的彩色输出。
响应值包含了抛出异常的更多信息,将帮助我们更容易地进行调试。
2. 动态访问控制
在 Laravel 中,你可以限制某些路由的请求频率。下面是一段文档中的例子。
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
在上面的例子中,用户对该分组下的路由每分钟只能请求 60 次。这个非常棒的功能是通过 throttle 中间件实现的。但是,某些情况下这种控制还不够,特别是你想通过其他的条件来控制频率的时候。而这,正是动态访问控制大展身手的时候。下面是来自文档中的另一段示例代码: