如果 Laravel 中的值不为空,如何验证输入字段
Posted
技术标签:
【中文标题】如果 Laravel 中的值不为空,如何验证输入字段【英文标题】:How to validate an input field if value is not null in Laravel 【发布时间】:2017-08-22 10:55:05 【问题描述】:我正在尝试使用 laravel 5.4 创建和更新用户
这是为创建用户添加的验证。它有效。
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
更新时不需要密码字段。但如果密码字段不为空,请验证 min:6 并确认规则。尝试使用sometimes
.. 但无法正常工作..
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users,email,'.$id,
'password' => 'sometimes|min:6|confirmed',
]);
【问题讨论】:
如果您有 2 个单独的创建和更新函数,您可以从更新中删除密码验证规则 【参考方案1】:尝试使用 nullable 作为规则
'password' => 'nullable|min:6|confirmed',
见https://laravel.com/docs/5.8/validation#a-note-on-optional-fields
【讨论】:
【参考方案2】:我会这样做:
//For new or create :
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
//For edit or update:
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'min:6|confirmed',//just remove required from password rule
]);
说明: 这样,只有在请求中定义(存在)时才会验证值 如果您使用 nullable,验证器将接受 null 作为值(我认为这是不可接受的) 如果您从更新中删除 password 验证,则此输入将根本不会被验证,并且 任何值 都将被接受(这也是不可接受的);
【讨论】:
回答前请仔细阅读问题。【参考方案3】:如果列可以为空
'password' => 'nullable|min:6|confirmed',
@Rejinderi 的回答是正确的!
如果列不可为空(这可能对其他人有帮助)
'password' => 'sometimes|required|min:6|confirmed',
结果
username = 'admin',
password = null // fail- required
username = 'admin',
password = 123 // fail- min:6
username = 'admin' // pass- validate only exist
【讨论】:
以上是关于如果 Laravel 中的值不为空,如何验证输入字段的主要内容,如果未能解决你的问题,请参考以下文章