2017-04-12 14 views
0

リクエスト中に時々存在する入力を検証する際に問題が発生しました。Laravel 5.4時には "null"入力時に妥当性検査が必要ない

// Controller 
public function update(Request $request, User $user) 
{  
    $updateResult = $user->updateUser($request); 
    return dd($updateResult); 
} 

// User Model 

protected $validation = [ 
    'rules' => [ 
     'email' => [ 
      'sometimes', 
      'email', 
      'required', 
     ], 
     'password' => [ 
      'sometimes', 
      'min:6', 
      'required', 
     ], 
     'first_name' => [ 
      'sometimes', 
      'required', 
     ], 
     'last_name' => [ 
      'sometimes', 
      'required', 
     ], 
    ], 
    'messages' => [ 
     'email.required' => 'An email is required.', 
     'email.email' => 'The email must be valid.', 
     'password.required' => 'A password is required.', 
     'password.min' => 'Your password must be at least six (6) characters long.', 
     'first_name.required' => 'Your first name is required.', 
     'last_name.required' => 'Your last name is required.', 
    ], 
]; 

public function updateUser(Request $request) 
{ 
    $validation = Validator::make($request->all(), [ 
     $this->validation['rules'], 
     $this->validation['messages'], 
    ]); 

    if ($validation->fails()) 
    { 
     return $validation; 
    } 

    else 
    { 
     return "OK"; 
    } 
} 

だから、いくつかの更新ページで$要求 - >すべての()のみ、これらのフィールドのサブセットを持っているとしています。ただし、フィールドが存在しても、値がnullの場合、必要なトリガーは発生しません。

[ 
    'first_name' => null, 
    'last_name' => 'Davidson', 
    'job_title' => 'Tech Support', 
] 

上記要求配列は、「OK」を返します...私はフィールドから時々削除した場合、一部の入力要求が送信されるときに、それはフィールドが必要とされていると言って失敗しました。

私はここで何かが欠けてクリアしていますが、私は、私はこれを正しく構成されたと思ったドキュメント読んでから:いくつかの状況で

を、あなただけのそのフィールド場合 フィールドに対して検証チェックを実行することを望むかもしれません入力配列に存在します。すぐに を実行するには、ルールリストに時々のルールを追加します。

$ v = Validator :: make($ data、['email' => '時には必須| email']]); Laravel 5.4で

答えて

2

あなたが直面している問題は、単にバリデーターを呼び出す際のエラーによるものです。 2番目のパラメータは、渡した多次元配列ではありません。 rules配列とmessages配列は別々のパラメータです。

$validation = Validator::make($request->all(), [ 
    $this->validation['rules'], 
    $this->validation['messages'], 
]); 

が期待どおりに動作することはありません

$validation = Validator::make($request->all(), 
     $this->validation['rules'], $this->validation['messages']); 
+0

これは私がstackoverflowを愛しているものです...追加目のセット。これは真剣に私を精神的に運転していた。私はその配列がそこにいかにあるかを本当に知らない、規則を構築することからの筋肉の記憶であったに違いない。良いピックアップ!再度、感謝します。 – Trent

1

空の文字列がConvertEmptyStringsToNullミドルウェアでNULLに変換されます...あなたにいくつかの問題を引き起こすかもしれない...

をあなたはすべてのあなたのオプションの検証にNULL可能追加する必要があります...

ほしいと思っています。

+0

私はドキュメントへのリンクが順番にあると思います:https://laravel.com/docs/5.4/validation#a-note-on-optional-fields – anakadote

0
'first_name' => [ 
     'sometimes', 
     'required', 
    ], 

に置き換える必要があります。時には、何かが来たら、次のルールは何ですか?この場合は「必須」です。必要なものは何ですか?

'first_name' => [ 
     'sometimes', 
     'required', 
     'min:1', 
    ], 

入力がない場合、null値は引き続きNULL値になり、失敗しません。更新のためにフィールドの値をテーブルに保持したい場合は、その入力値をその値でフォームに入力します。

ヌル値は''として送信され、app \ Http \ kernel.phpミドルウェアのConvertEmptyStringsToNull::classでヌルになっています。

+0

時には必要なルールは完全に有効なシナリオです。 basicallayは次のように言っています: "フィールドが存在する場合、nullまたは空であってはなりません" –

関連する問題