如何仅在数据存在时验证laravel输入



所以我有一个Laravel表单,我在那里收集数据,我使用相同的表单来创建和更新表。问题是,我只想在输入字段包含数据时对其进行验证,这是我的验证逻辑。

$validated = $request->validate([
'site_name' => 'sometimes|string',
'site_email' => 'sometimes|email',
'site_keywords' => 'sometimes|string',
'site_description' => 'sometimes|string',
'site_acronym' => 'sometimes|string|max:7',
'site_favicon' => 'sometimes|mimes:jpg,png,jpeg,svg',
'site_logo' => 'sometimes||mimes:jpg,png,jpeg,svg',
'site_currency' => 'sometimes|string',
'site_currency_symbol' => 'sometimes|string',
]);

但当表单提交时,laravel会为空输入字段返回一个错误,例如,它会返回一个类似so的错误;网站名称必须是字符串">用于第一个验证规则。

请问我做错了什么?

编辑

因此,我接受了@rojvroemen的建议,并使用可为null的验证规则修改了我的代码,现在它运行得很好。这是新的代码块

$validated = $request->validate([
'site_name' => 'string|nullable|sometimes',
'site_email' => 'email|nullable|sometimes',
'site_keywords' => 'string|nullable|sometimes',
'site_description' => 'string|nullable|sometimes',
'site_acronym' => 'string|nullable|sometimes|max:7',
'site_favicon' => 'mimes:jpg,png,jpeg,svg|nullable|sometimes',
'site_logo' => 'mimes:jpg,png,jpeg,svg|nullable|sometimes',
'site_currency' => 'string|nullable|sometimes',
'site_currency_symbol' => 'string|nullable|sometimes',
]);

在这种情况下,您需要使用nullablesometimes基本上意味着它只在数据中存在该字段时运行该字段的验证。

简而言之:
如果要允许null值,请使用nullable
https://laravel.com/docs/8.x/validation#rule-可为空

如果您只想在给定输入数组中存在字段时验证该字段,请使用sometimes
https://laravel.com/docs/8.x/validation#validating-出现时

注意:您可能需要确保过滤掉空值,因为包含null的字段仍然存在:
$validated = array_filter($validated);

相关内容

  • 没有找到相关文章

最新更新