php - Laravel 验证器 `required` 也因空字符串而失败

标签 php macos validation laravel

我在我的代码中尝试使用 laravel required 验证器,不幸的是它甚至对空字符串也失败了。我不希望它因空字符串而失败。

$validator = \Validator::make(array("name"=>""), array("name"=>"required"));
if ($validator->fails()){
    var_dump($validator->messages());
} else {
    die("no errors :)");
}

它给了我以下输出

object(Illuminate\Support\MessageBag)[602]
  protected 'messages' => 
    array (size=1)
      'name' => 
        array (size=1)
          0 => string 'The name field is required.' (length=27)
  protected 'format' => string ':message' (length=8)

它应该通过,因为我给了一个空字符串作为 name 字段。

上述行为发生在 OSX 环境(PHP 版本 5.5.18)中,但它在 linux 环境(PHP 版本 5.5.9-1ubuntu4.5)中工作正常。

最佳答案

如果您传递空字符串,required 规则实际上返回 false。

如果我们看一下代码(Illuminate\Validation\Validator)

protected function validateRequired($attribute, $value)
{
    if (is_null($value))
    {
        return false;
    }
    elseif (is_string($value) && trim($value) === '')
    {
        return false;
    }

    // [...]

    return true;
}

我认为您唯一的选择是写下您的 own validation rule检查值是否不为空:

Validator::extendImplicit('attribute_exists', function($attribute, $value, $parameters){
    return ! is_null($value);
});

(extendImplicit 是必需的,因为使用 extend 自定义规则只会在值不是空字符串时运行)

然后像这样使用它:

\Validator::make(array("name"=>""), array("name"=>"attribute_exists"));

关于php - Laravel 验证器 `required` 也因空字符串而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28020637/

相关文章:

javascript - Laravel Mix (webpack) Inline JS undefined jQuery/vendor

php - PDO MYSQL 输出 false

php - 如何使用 codeigniter 中的左连接 Activity 记录显示来自两个不同表的字段?

java - Eclipse for Mac (OSX) 中 "build and run"的快捷方式

objective-c - 确定应用程序是否因系统关闭而终止

c++ - 使用 `dlopen` 重新加载运行时库

javascript - 用于验证数学方程式的正则表达式

java - 查找字符串验证失败的位置

ruby - 验证空白字段 Rails 模型

php - 在 php __autoload() 中将 CamelCase 转换为 under_score_case