具有空值的参数在Laravel中触发(!isset)验证

时间:2018-05-04 08:13:21

标签: laravel laravel-5 postman laravel-5.6 laravel-middleware

这是我的剧本: -

if (!isset($request->security_token)) 
{ 
    // Provide security token
    $error = TRUE;
    $err_message[] = Lang::get('caption_validation_error.ser_valid_security_token.value');
    $err_validation[] = Lang::get('caption_validation_error.ser_valid_security_token.value').' [security_token]';
}

这意味着,如果参数未被"发送",则将触发验证。但是,如果一个参数为"空白"如果发送了值,则不得触发验证。

但是,当我通过POSTMAN应用程序点击api时,带有空白值的security_token进入!isset验证。

enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这并不是很明显为什么它是这样的,因为乍一看似乎很奇怪。但是,如果您对Laravel了解更多,并且查看app/Http/Kernel.php文件,您会在那里看到:

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 

从名称中可以找到将空字符串转换为null。因此,在您发送空参数的情况下,它被视为null,因此!isset($null)将为真。

所以你有两个选择:

  1. 从数组中删除此中间件 - 但是它会影响整个应用程序,因此如果您不确定它可能不是最好的方法
  2. 假设您只想在根本不发送参数而不是

    的情况下触发此验证
    if (!isset($request->security_token))  
    

    你可以使用例如

    if (!$request->has('security_token'))
    

    显然它并不完全相同 - 如果您现在发送此令牌并将其设置为null它仍然无法执行但我相信当您现在知道什么是使用这个空字符串,您现在可以根据需要进行调整。