Laravel字符串验证以允许空字符串

Glu*_*ear 3 php validation laravel

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

public function rules() 
{
    return [
        'age' => 'integer',
        'title' => 'string|max:50'
    ];
}
Run Code Online (Sandbox Code Playgroud)

如果我使用此有效负载向我的API提交请求:

{
  "age": 24,
  "title": ""
}
Run Code Online (Sandbox Code Playgroud)

Laravel返回错误:

{
    "message": "The given data was invalid.",
    "errors": {
        "title": [
            "The title must be a string."
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ka_*_*lin 10

尝试查看ConvertEmptyStringsToNull中间件是否处于活动状态,然后它会解释这种行为,请参阅文档


Zak*_*lwe 6

您需要nullable允许一个空字符串

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

  • 这不允许空字符串,这只是忽略空字符串,将其视为“null”。如果我们想用空字符串覆盖现有的“title”字段怎么办? (4认同)
  • @GluePear 如果你想这样做,你还需要从中间件中禁用 `\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class`。该中间件会自动将空字符串转换为 null。从数据库规范化的角度来看,无论如何都最好将 `null` 作为值而不是空字符串。 (2认同)

Mah*_*ari 5

有一个present规则是检查密钥是否存在,但让它为空。

#展示

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

https://laravel.com/docs/5.7/validation#rule-present