2017-01-12 19 views
5

私はPOSTリクエストを検証しようとしています。Laravel 5.2 validation:date_format:Y.m.d not working

形式はd.m.Y(12.1.2017) このフィールドのルールはrequired|date_format:d.m.Yです。

私は、このエラーメッセージが表示されます:

InvalidArgumentException in Carbon.php line 425: 
Unexpected data found. 
Unexpected data found. 
Data missing 

私は-あるいは/.を変更すると、それが働いている - > POSTデータがルールに一致する前に変更。

これにはドイツ語の書式が必要です。

編集: 私の検証ルール:

public function rules() 
{ 
    return [ 
     'title' => 'required|max:255', 
     'expiration_date' => 'required|date_format:d.m.Y', 
     //'description' => 'required', 
     'provision_agent' => 'required|integer|between:0,100', 
     'discount_consumer' => 'required|integer|between:0,100', 
     'quota' => 'required|integer', 
    ]; 
} 
+0

私はそれは通常、.'は、検証ルールの文字列内の特殊文字である 'という事実に何らかの形で関係していると思います他の理由でLlaravelで使用されていますが、どのように逃げることができないのかわかりません。 – Alex

+0

試しましたか? ?または '[' field '=>' date_format '=> [' required '、' d.m.Y ']] '?また、より多くのコードを表示できますか? –

+0

@FelippeDuarteはどこに書かれていますか?ただ好奇心... – Alex

答えて

4

書式を折り返す私はちょうど5.2でうまくいきました。正常に動作しています。

public function rules() 
{ 
    return [ 
     'title' => 'required|max:255', 
     'expiration_date' => 'required|date_format:"d.m.Y"', 
     //'description' => 'required', 
     'provision_agent' => 'required|integer|between:0,100', 
     'discount_consumer' => 'required|integer|between:0,100', 
     'quota' => 'required|integer', 
    ]; 
} 

しかし、あなたはCarbon.phpラインに質問InvalidArgumentExceptionで追加され何のエラーが425:あなたがカーボン

EXPIRATION_DATEこのようなコントローラやモデルでいくつかの場所を使用していると思い、私の何か他のものと思われます
echo Carbon::createFromFormat('Y-m-d', '12.1.2017'); 

あなたはこの

echo Carbon::parse('12.1.2017')->format('Y-m-d') 
のようなものを試してみてください
0

引用符にあなたのフォーマットをラップ:

'date_format:"d.m.Y"' 
+0

同じ問題を試しました。おもう 。検証で使用される演算子です。私はそれをエスケープする必要がありますが可能かどうかを見つけることができません。 – mht

+0

@mhtラップは正常に動作しているはずです。5.2とうまく動作しています。 – vijaykumar

0

は、次のようにこれはあなたの問題を解決します

public function rules() 
{ 
    return [ 
     'title' => 'required|max:255', 
     'expiration_date' => 'date_format:"d.m.Y"|required', // I have changed order of validation 
     //'description' => 'required', 
     'provision_agent' => 'required|integer|between:0,100', 
     'discount_consumer' => 'required|integer|between:0,100', 
     'quota' => 'required|integer', 
    ]; 
} 

希望をお試しください。

+0

オーダーの変更はうまくいくと思いますが、折り返しは機能します。 date_formatの検証後。ここで必要なものはありませんか? – vijaykumar

0

あなたがそうでなければ、問題を解決する成功しない場合、あなたはまだcustom validation ruleを使用することができます。

Validator::extend('date_dmY', function ($attribute, $value) { 
    $format = 'd.m.Y'; 
    $date = DateTime::createFromFormat($format, $value); 
    return $date && $date->format($format) === $value; 
}, 'optional error message'); 

余分なチェック$date->format($format) === $valueは、例えば、範囲外の日付を受け入れて誤って避けるためです"32.01.2017"。 php.netのcommentを参照してください。

カスタム検証ルールが定義されていたら、そのようにそれを使用することができます:

public function rules() { 
    return [ 
     'expiration_date' => 'required|date_dmY', 
    ]; 
}