ネストされた条件を持つ検証ルールで問題が発生しました。
class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id,==,3|integer',
];
}
}
実際、私は次のことを実行します。-type_idが3に等しい場合にのみ、external_idをチェックします-それが整数かどうかをチェックします。
フォームを投稿するとき、type_idを3に選択するとルールが機能しますが、1や2などの別のtype_idを選択すると、検証がパスしません。
External_idは整数でなければなりません。
Null許容条件を追加しようとしましたが、required_ifが機能しなくなりました
何かアイデアはありましたか?
ルールは、互いに独立した2つのチェックを実行します。 _external_id
_!= 3の場合に_type_id
_フィールドが必要ないからといって、整数チェックが無視されるわけではありません。
あなたが探しているのは 条件付きルール です。これにより、いつチェックを実行するかを細かく制御できます。 :
_$validator = Validator::make($data, [
'type_id' => 'required|integer'
]);
$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});
_
フォーム検証を使用する場合、getValidatorInstance()
メソッドをオーバーライドすることで、基礎となるバリデーターインスタンスにアクセスできます。
_class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer'
];
}
protected function getValidatorInstance() {
$validator = parent::getValidatorInstance();
$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});
return $validator;
}
}
_
同じ問題に遭遇し、私にはうまくいくように見える次の答えを見つけました:
issue-using-required-if-validation-rule-in-form-builder
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id,==,3|nullable|integer',
];
私のための結果:
フィールドが設定されていない、タイプIDが3ではない-パス
フィールドにデータが入力されていません。ID3を入力してください-失敗-必須フィールド
フィールドが入力され、タイプID 3、非整数-整数ルールで失敗
フィールドにデータが入力され、ID 3、整数型-パス-すべて良好です。
注-ヌル可能ルールが入っていると思うLaravel 5.3
これを試して、
class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id|in:3|integer',
];
}
}