2017-12-11 25 views
-1

Laravel 5.5/Validator /カスタムルール

私はLaravelを数ヶ月前に発見し、いくつかのLaracastビデオを追跡しました。さて、私はカスタムバリデータの問題に悩まされています。私のフォーム要求を検証する(最小/最大| |必要な日付)

私は通常、恒久的なルールを持っています。この部分は動作します。

しかし、私はリクエストパラメータの1 IF通常のルールとして確認できたカスタム検証持っている - SELECT1は - (exemple用)1に設定されています。

私は何十もの説明を読みましたが、十分にはっきりしていません。

私のコードで始めましょう。あなたの寛容に感謝します... 私の質問は、一番下のcustomTest関数です。

は、

1をいただき、ありがとうございます/私はいくつかのルールを作って、いくつかの行を変更し

php artisan make:controller priceRequest.php 

2 /で新しい要求を行いました。

public function authorize() 
{ 
    return true; 
} 

// Permanent RULES 
public function rules() 
{ 
    $rules = [ 
     'field1' => 'required|min:1|max:15', 
     'field2' => 'required', 
     'date1' => 'required|date', 
     'select1' => 'required', 
    ]; 

    return $rules; 
} 

は、その後、私は

public function withValidator($validator) { 
    $validator->after(function ($validator) { 
     if (!$this->customTests($this->request->get('data'))){ 
      $validator->errors()->add('custom', 'Something is wrong'); 
     } 
    }); 
} 

カスタム検証を実行するための新しい機能を統合最後に、私はcustomTests機能を書いて、それは私がこだわっているこのいずれかの内部にあります!

public function customTests($data) { 

    if ($data['select1'] == 1) { 

     // HERE MY QUESTION 
     // I'd like to verify that $data['date2'] 
     // is a date and is set. So, I'd like to 
     // add a rule to rules (has I made with 
     // 'date1' => 'required|date', 
     // and return TRUE if the rule match or 
     // FALSE 

    } 
} 
+0

質問は何ですか? –

+0

申し訳ありませんが、コードに正しい質問があります:-( – user2995748

+0

他の方法で定義しようとしていますか? –

答えて

0

そこで、私は私の問題を解決しました。

私はに新しいルールを追加しようとしたので、私は間違いや混乱を作った - >の後に()関数。

ので、正しいコードは以下の通りです:

public function withValidator($validator) 
{ 
    $validator->sometimes('ticket.price', 'required|integer|min:0.1', function ($input) { 
    if ($any_condition_who_need_to_verify_new_rule) { 
     return true; 
    } 
    else { 
     # Everything is perfect, this rule cas be omitted 
    } 

    $validator->after(function ($validator) use ($ticket) { 

     /* New test more complicated which cannot be 
      tested with a rule */ 
     if ($this_test_is_complex_and_fails) { 
      $validator->errors()->add('validateTicket', 'This is another problem'); 
      return false; 
     } 
    }); 
    return $validator; 
} 
関連する問題