如何仅在数据存在时验证 laravel 输入?
How to validate laravel input only when data is present?
所以我有一个 Laravel 表单来收集数据,我使用相同的表单来创建和更新 table。问题是我只希望输入字段在包含数据时被验证,这是我的验证逻辑。
$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 returns 空输入字段错误,例如 returns 像这样的错误 “站点名称必须是字符串。”第一个验证规则。
请问我做错了什么?
编辑
所以我听取了@roj-vroemen 的建议并使用可空验证规则修改了我的代码,现在它工作得很好。
这是新的代码块
$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-nullable
如果您只想验证给定输入数组中存在的字段,请使用 sometimes
。
https://laravel.com/docs/8.x/validation#validating-when-present
注意:您可能需要确保过滤掉空值,因为包含 null
的字段仍然存在:
$validated = array_filter($validated);
所以我有一个 Laravel 表单来收集数据,我使用相同的表单来创建和更新 table。问题是我只希望输入字段在包含数据时被验证,这是我的验证逻辑。
$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 returns 空输入字段错误,例如 returns 像这样的错误 “站点名称必须是字符串。”第一个验证规则。
请问我做错了什么?
编辑
所以我听取了@roj-vroemen 的建议并使用可空验证规则修改了我的代码,现在它工作得很好。 这是新的代码块
$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-nullable
如果您只想验证给定输入数组中存在的字段,请使用 sometimes
。
https://laravel.com/docs/8.x/validation#validating-when-present
注意:您可能需要确保过滤掉空值,因为包含 null
的字段仍然存在:
$validated = array_filter($validated);