2017-01-23 44 views
0

私はLaravel 5.3アプリケーションと、ユーザープロファイル値を送信する更新フォームを持っています。そのうちの1つはユーザー画像でもあります。私はそのための隠し入力フィールドを作成しています。ユーザーが新しい画像をアップロードしていない場合でも、古い画像値の隠しフィールドが表示されます。Laravelの検証ルールは、フィールドが空白の別のフィールドが必要な場合

<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_if:old_image, null','image' => 'required_without:old_image',ともして試してみましたが、それらのどれも不足している画像のためのいずれかのエラーメッセージを示しませんでした。

+0

http://stackoverflow.com/questions/41697979/ laravel-5-3-use-custom-validation/41698396#41698396 – Bugfixer

+0

または条件 – Bugfixer

+0

に条件を入力すると、required_if検証ルールを使用できます。参考:https://laravel.com/docs/5.3/validation – mith

答えて

1

dd(request()->all()))、実際のサンプル要求データを表示してください働いていない場合、これは、required_withoutルールによって行うことができる。この

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

これは私が上記のコメントで述べたものです – Bugfixer

+1

Laravelラッパーがあります。 ['$ request-> has( 'old_image')'](https://laravel.com/docs/5.1/requests#retrieving-input) – devk

1

を試してみて、あなたが検証ルール:私はこのようなエラーメッセージが表示していますを使用して。キャッチするシナリオは単純です:両方のフィールドが空の場合。あなたの例では

は、このルールを適用すると、動作するはずです:

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

required_without:検証の下のフィールドが存在し、空であってはならないこと

のfoo、バー、...場合にのみ、任意の の指定された他のフィールドは存在しません。 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."]] 
+0

これは受け入れられる回答でなければなりません。 Laravelルールとの一部の統合では、配列の設定(Folklore GraphQLなど)が必要で、非純粋な検証では十分ではありません。 – kirgy

0

次の2つのルール

'image' => 'required_if:old_image,' // yes, nothing after comma 

かで動作することができます

'image' => 'required_without:old_image,' 
関連する問題