是否有一个请求/验证规则会在意外输入的情况下引发错误?

Posted

技术标签:

【中文标题】是否有一个请求/验证规则会在意外输入的情况下引发错误?【英文标题】:Is there a request/validation rule that would throw an error in case of unexpected input? 【发布时间】:2021-11-10 07:32:02 【问题描述】:

Request::only() 之类的东西在请求中有任何额外/意外字段时会引发错误?

例如:

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

如果 POST 请求包含“用户名”、“密码”和“foo”字段,会引发错误吗?

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

【问题讨论】:

【参考方案1】:

您可以使用Macro 在请求类中创建自己的strictly 方法

AppServiceProvider.phpboot 方法里面添加这个方法

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()
            );
        
      );

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

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

【讨论】:

谢谢!我认为它可以使用 array_diff() 来简化一点,比如if (count(array_diff(request()->keys(),$parameters)) > 0)) throw... @YourCommonSense 你可以编辑这个答案。 @YourCommonSense 我更新了我的答案并抛出了一条消息

以上是关于是否有一个请求/验证规则会在意外输入的情况下引发错误?的主要内容,如果未能解决你的问题,请参考以下文章