2017-02-06 6 views
1

laravel 5.3では、モデルのルールの現在のインスタンスのパラメータとして渡すことはできますか?laravelのバリデーターに現在のインスタンスを渡す

私のモデルのいくつかのフィールドの現在の値をチェックし、このフィールドを別の値に設定することを許可または拒否するルールが必要です。

問題は、バリデーターは新しい値だけを受け取るだけですが、古い値もチェックしたいのです。

答えて

1

あなたは、静的メソッドIlluminate\Support\Facades\Validator::makeの四番目の引数$customAttributesを使用することができます。この引数では、あなたの場合には、あなたが欲しいものを渡すことができます - モデルの特定のインスタンス:

$order = new Order(); // <!-- create or load for DB instance of your model 

/* 
* create validator for validation of the some $requestForValidation 
* by some $validationRules 
*/ 
$validator = \Illuminate\Support\Facades\Validator::make($requestForValidation, 
$validationRules, [], [ 
    'instance' => $order, 
]); 

そして、あなたが到達することができ、あなたのカスタム検証ルールでは、このカスタムは、次のように属性:

Validator::extend('customValidationRule', function ($attribute, $value, 
$parameters, $validator) { 
    $validator->customAttributes['instance']; // <!-- here is your instance 
}); 
0

私が正しく理解していれば、existsの検証ルールが考えられますか? Laravelのdoc:https://laravel.com/docs/5.3/validation#rule-exists

+0

なし、私はデータベースを照会する必要はありません。現在のインスタンスを検証ルールに渡したいと思います。 –

1

メソッドを使用して検証前に古い値を追加することができます。これはまだ必要な場合

public function store(Request $request) 
{ 
    $request->merge(['old_key' => 'Value']); 
    $this->validate($request, [ 
     'old_key' => 'required' 
    ]); 
} 
関連する問題