如果 Laravel 中的值不为空,如何验证输入字段
How to validate an input field if value is not null in Laravel
我正在尝试使用 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',
]);
尝试使用可空作为规则
'password' => 'nullable|min:6|confirmed',
见https://laravel.com/docs/5.8/validation#a-note-on-optional-fields
我会这样做:
//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
]);
解释:
这样,只有在 request
中定义(存在)时才会验证该值
如果您使用 nullable,那么验证器将接受 null 作为值(我认为这是不可接受的)
如果您从更新中删除 password 验证,则此输入根本不会被验证,并且 any value 将被接受(这同样是不可接受的) ;
万一列可以为空
'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
我们也可以根据 Documentation
使用验证器 Class 的 sometimes 方法来实现这一点
use Illuminate\Support\Facades\Validator;
//... your code ...
$validator = Validator::make($request->all(), [
'name' => 'required',
'contact' => 'required',
]);
$validator->sometimes('password', 'min:6|confirmed', function ($input) {
return (strlen($input->password) > 0);
});
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
这将在密码字段的长度大于 0 时验证密码属性规则。否则将忽略该密码属性的规则。
我正在尝试使用 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',
]);
尝试使用可空作为规则
'password' => 'nullable|min:6|confirmed',
见https://laravel.com/docs/5.8/validation#a-note-on-optional-fields
我会这样做:
//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
]);
解释:
这样,只有在 request
中定义(存在)时才会验证该值
如果您使用 nullable,那么验证器将接受 null 作为值(我认为这是不可接受的)
如果您从更新中删除 password 验证,则此输入根本不会被验证,并且 any value 将被接受(这同样是不可接受的) ;
万一列可以为空
'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
我们也可以根据 Documentation
使用验证器 Class 的 sometimes 方法来实现这一点use Illuminate\Support\Facades\Validator;
//... your code ...
$validator = Validator::make($request->all(), [
'name' => 'required',
'contact' => 'required',
]);
$validator->sometimes('password', 'min:6|confirmed', function ($input) {
return (strlen($input->password) > 0);
});
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
这将在密码字段的长度大于 0 时验证密码属性规则。否则将忽略该密码属性的规则。