是否有 request/validation 规则会在意外输入时抛出错误?

Is there a request/validation rule that would throw an error in case of unexpected input?

如果请求中有任何 extra/unexpected 字段,类似 Request::only() 的东西会抛出错误?

例如:

$request->strictly(['username', 'password']);

如果 POST 请求包含字段 'username'、'password' 和 'foo'?

,则会引发错误

如果没有,手动执行此类验证的最佳方法是什么?

您可以使用 Macro

在请求 class 中创建自己的 strictly 方法

AppServiceProvider.php 和内部 boot 方法添加此方法

use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;

public function boot()
{
     Request::macro('strictly', function(array $paramaters) {
       $array = array_diff(request()->keys(), $paramaters);
        if (count($array) > 0) {
            throw ValidationException::withMessages(
                collect($array)->map(function ($row) {
                    return [$row => 'not needed'];
                })->collapse()->all()
            );
        }
      });
}

现在您可以在控制器或请求中使用此方法class

request()->strictly(['username', 'password']);