php Laravel验证规则如果字段为空则需要另一个字段

bd1hkmkf  于 2023-08-02  发布在  PHP
关注(0)|答案(8)|浏览(125)

我有一个Laravel 5.3应用程序,还有一个更新表单,我在那里发送用户配置文件值。其中一个是用户图像,我为它创建了一个隐藏的输入字段,所以如果用户没有上传任何新的图像,我仍然可以看到他有一个隐藏的字段与旧的图像值。

<input type="hidden" class="form-control" name="old_image" value="{{ $player->image_filename }}" id="oldImage">

字符串
如果他移除图像,隐藏的输入值将变为空。

document.getElementById('oldImage').value = '';


这就是我想更新用户映像的方式。但我不知道如何为该表单设置验证规则。与此类似的东西:

public function rules()
    {
        return [
          'first_name' => 'required|max:50',
          'last_name' => 'required|max:50',
          'birthday' => 'required',
          'image' => required if old_image empty
        ];
    }


我已经尝试与'image' => 'required_without:old_image','image' => 'required_if:old_image, null',,但没有一个显示任何错误信息丢失的图像。我显示的错误消息如下所示:

7vux5j2d

7vux5j2d1#

你可以用两个规则来工作

'image' => 'required_if:old_image'

字符串
或者:

'image' => 'required_without:old_image'

9rbhqvlz

9rbhqvlz2#

这可以通过required_without规则来完成,如果它不起作用,请显示实际的示例请求数据(dd(request()->all() ))和您正在使用的验证规则。您要捕获场景很简单:如果两个字段都为空。
在示例中,应用此规则应该有效:

return [
          // ...
          'image' => 'required_without:old_image'
        ];

字符串
required_without:foo,bar,...
只有当任何其他指定字段不存在时,验证下的字段才必须存在且不为空。Validation - 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."]]

py49o6xq

py49o6xq3#

对于新的laravel版本,如果需要使用required_if,它至少需要两个参数,所以应该使用第二个和第三个参数作为if条件。

'old_image'=>'required_if:image,=,null',
  'image'=>'required_if:old_image,=,null'

字符串

idv4meu8

idv4meu84#

用这个

'image'=>'required_if:old_image,=,null'

字符串

tvmytwxo

tvmytwxo5#

我知道这是一个老问题,但我偶然发现它在我的搜索。因此,我将在这里张贴我的解决方案,以及为未来的访客。
我认为这个解决方案是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'));
          })
      ]
    ];
}

字符串

dzjeubhm

dzjeubhm6#

您缺少可空验证

'old_image' => 'required'
'image' => 'required_without:old_image|nullable'

字符串

vfh0ocws

vfh0ocws7#

试试这个

if (empty($request->input('old_image'))){
     $this->validate($request, [
       'image' => 'required',
     ]);
}
else {
     // Validation in case of else goes here
     $this->validate($request, [
      // rule
     ]);
}

字符串

nom7f22z

nom7f22z8#

use Illuminate\Validation\Rule;
'image' => Rule::when($request->image != null, 'required|string')

字符串

相关问题