2017-05-18 3 views
0

例で空の文字列を渡します。Laravelのバリデータは、 'NULL可能' ルール

xは、空の文字列バリデータを除いて何か他のものがある場合、エラーについて述べています。

データベース内のカラムは空文字列を渡すと有効であることがわかりますが、null可能な整数カラムに''(空文字列)を保存しようとするため、mysqlは例外をスローします。

フィールドに指定できる値は、null,1,2,3,4,...などです。それ以外はすべて失敗します。 ( '|必要| NULL可能整数|分:1')

私はrequiredルールを追加する場合は、バリデータがnull値のために失敗したソースコードを読む

+0

ルール 'nullable'はその値は' null'なのですることができますが、それはnull'なので自体 'に空の値を変換しません、と言います。 –

+0

値はnullではないので、ここでは 'nullable'は実際には有効ではありません。 'Validator :: make(['x' => '']、['x' => 'integer | min:1']) - > errors() - > all();'エラー – apokryfos

答えて

0

この関数は、(Validator.phpに)あります

protected function isValidatable($rule, $attribute, $value) 
{ 
    return $this->presentOrRuleIsImplicit($rule, $attribute, $value) && 
      $this->passesOptionalCheck($attribute) && 
      $this->isNotNullIfMarkedAsNullable($attribute, $value) && 
      $this->hasNotFailedPreviousRuleIfPresenceRule($rule, $attribute); 
} 

protected function presentOrRuleIsImplicit($rule, $attribute, $value) 
{ 
    if (is_string($value) && trim($value) === '') { 
     return $this->isImplicit($rule); 
    } 

    return $this->validatePresent($attribute, $value) || $this->isImplicit($rule); 
} 

関数presentOrRuleIsImplicitは、値が''の場合、ルールが「暗黙的」(基本的に属性が必要な場合)の場合にのみ検証することを基本的に示しています。

この場合、''とnullが同じではないため、両方とも必須で、null許容の検証が失敗します。

Laravel 5.4にはConvertEmptyStringsToNullと呼ばれる組み込みのミドルウェアがあり、基本的にすべての''の値を受け取り、それらをnullに変換することでこの不一致を処理するのに役立ちます。

0

Laravel 5.4には、すべての空の文字列をデフォルトでnullに変換するグローバルミドルウェアが付属しています。これを望まないなら、リストからミドルウェアをコメントアウトしてください。

アプリ/ HTTP/Kernel.php

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
関連する問題