Mar*_*rco 7 php validation laravel
我有一个Laravel 5.3应用程序和一个更新表单,我发送用户配置文件值.其中一个是用户图像,我正在为它创建一个隐藏的输入字段,所以如果用户没有上传任何新图像,我仍然可以看到他有隐藏字段和旧图像值.
<input type="hidden" class="form-control" name="old_image" value="{{ $player->image_filename }}" id="oldImage">
Run Code Online (Sandbox Code Playgroud)
如果他删除图像,隐藏的输入值将变为空.
document.getElementById('oldImage').value = '';
Run Code Online (Sandbox Code Playgroud)
这就是我想到的更新用户图像的方法.但我不知道如何为该表单设置验证规则.与此类似的东西:
public function rules()
{
return [
'first_name' => 'required|max:50',
'last_name' => 'required|max:50',
'birthday' => 'required',
'image' => required if old_image empty
];
}
Run Code Online (Sandbox Code Playgroud)
我已尝试过,但'image' => 'required_without:old_image',也'image' => 'required_if:old_image, null',没有显示任何错误信息丢失图像.我正在显示如下错误消息:
Ric*_*alo 14
您可以使用两个规则
'image' => 'required_if:old_image,' // yes, nothing after comma
Run Code Online (Sandbox Code Playgroud)
要么:
'image' => 'required_without:old_image,'
Run Code Online (Sandbox Code Playgroud)
M.a*_*man 11
对于新的laravel版本,如果需要使用required_if,它至少需要两个参数,所以应该使用第二个和第三个参数作为if条件。
'old_image'=>'required_if:image,=,null',
'image'=>'required_if:old_image,=,null'
Run Code Online (Sandbox Code Playgroud)
小智 6
这可以通过required_without规则来完成,如果它不起作用,请显示实际的样本请求数据(dd(request()->all() ))和您正在使用的验证规则.您想要捕获的方案很简单:如果两个字段都为空.
在您的示例中,应用此规则应该有效:
return [
// ...
'image' => 'required_without:old_image'
];
Run Code Online (Sandbox Code Playgroud)
required_without:FOO,酒吧,...
验证字段必须存在,并且仅当不存在任何其他指定字段时才为空. 验证 - Laravel 5.3
例:
$rules = [
'new_value' => 'required_without:old_value'
];
validator(
['new_value' =>'',
'old_value' => 'old value is preserved here']
, $rules)->errors()->toArray();
// output: [] <-- no errors!
validator(
['new_value' =>'New value!',
'old_value' => '']
, $rules)->errors()->toArray();
// output: [] <-- no errors!
validator(
['new_value' =>'',
'old_value' => '']
, $rules)->errors()->toArray();
// output: ["new_value" => ["The new value field is required when old value is not present."]]
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但我在搜索过程中遇到了它。因此,我也会在这里发布我的解决方案,以供未来的访客使用。
我认为这个解决方案正是OP想要的。该解决方案不使用其他包或自定义验证方法,因此在我看来这也是一个优点。
我所做的是这样的:
public function rules()
{
return [
'first_name' => ['required', 'max:50'],
'last_name' => ['required', 'max:50'],
'birthday' => ['required'],
'old_image' => ['nullable'],
'image' => [
Rule::requiredIf(function() {
return empty($this->request->get('old_image'));
})
]
];
}
Run Code Online (Sandbox Code Playgroud)
尝试这个
if (empty($request->input('old_image'))){
$this->validate($request, [
'image' => 'required',
]);
}
else {
// Validation in case of else goes here
$this->validate($request, [
// rule
]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20078 次 |
| 最近记录: |