Php 允许空字符串的Laravel字符串验证

Php 允许空字符串的Laravel字符串验证,php,laravel,validation,Php,Laravel,Validation,在Laravel 5.7中,我使用表单请求验证: public function rules() { return [ 'age' => 'integer', 'title' => 'string|max:50' ]; } 如果我使用此有效负载向API提交请求: { "age": 24, "title": "" } Laravel返回错误: { "message": "The given data was inva

在Laravel 5.7中,我使用表单请求验证:

public function rules() 
{
    return [
        'age' => 'integer',
        'title' => 'string|max:50'
    ];
}
如果我使用此有效负载向API提交请求:

{
  "age": 24,
  "title": ""
}
Laravel返回错误:

{
    "message": "The given data was invalid.",
    "errors": {
        "title": [
            "The title must be a string."
        ]
    }
}

我希望它能够通过验证,因为标题是一个字符串,尽管是空的。验证应该如何制定以允许空字符串?

您需要
可空
才能允许空字符串

public function rules() 
{
    return [
        'age' => 'integer',
        'title' => 'nullable|string|max:50'
    ];
}

尝试查看
convertEmptyStringsToull
中间件是否处于活动状态,然后它将解释此行为,请参见添加
min
约束是否可以解决此问题

public function rules() 
{
    return [
        'age' => 'integer',
        'title' => 'string|min:0|max:50'
    ];
}
我试试看

公共功能规则()
{
返回[
“年龄”=>“整数”,
“title”=>“string |有时”
];
}

这将仅在标题存在时验证标题

检查钥匙是否存在,但将其设为空,这是
present
规则

#出席

出席 验证中的字段必须存在于输入数据中,但可以为空


尝试将
当前的
所需的
验证器添加为well@ka_linPresent和required不描述此属性,此属性不需要存在,也不是必需的。nullable-验证中的字段可能为null。这在验证可以包含空值的字符串和整数等基元时特别有用。这不允许空字符串,只会忽略空字符串,将其视为
null
。如果要用空字符串覆盖现有的
标题
字段,该怎么办?@GluePear如果要这样做,还需要从中间件中禁用
\lightlight\Foundation\Http\Middleware\convertEmptyStringsToull::class
。该中间件将自动将空字符串转换为null。从数据库规范化的角度来看,最好使用
null
作为值,而不是空字符串。我确认这确实有效。如果将该特定字段保留为空,
null
将使其通过为空。谢谢,那很有用。我不确定是否要删除该中间件,以防它被其他地方使用。但它解释了这种行为。当你希望它总是存在时,它不能回答问题,尽管允许它是空的。