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

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 我更新了我的答案并抛出了一条消息

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

在 java 中验证证书会引发异常 - 无法找到请求目标的有效证书路径

是否可以在没有 tfs 服务器的情况下验证 vs2010 中的自定义代码/架构规则?

UIViewController 导航 - 在意外状态下完成导航转换。导航栏子视图树可能会损坏

在没有模型的情况下在 MVC 中引发验证错误

跨服务器请求,设置请求头*,接口有参数不报跨域,接口无参 数报跨域,是啥情况,能帮忙解答下吗?

记一个并发规则验证实现