所以我有一个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',
]);
在这种情况下,您需要使用nullable
。sometimes
基本上意味着它只在数据中存在该字段时运行该字段的验证。
简而言之:
如果要允许null
值,请使用nullable
https://laravel.com/docs/8.x/validation#rule-可为空
如果您只想在给定输入数组中存在字段时验证该字段,请使用sometimes
https://laravel.com/docs/8.x/validation#validating-出现时
注意:您可能需要确保过滤掉空值,因为包含null
的字段仍然存在:$validated = array_filter($validated);