laravel 5.3では、モデルのルールの現在のインスタンスのパラメータとして渡すことはできますか?laravelのバリデーターに現在のインスタンスを渡す
私のモデルのいくつかのフィールドの現在の値をチェックし、このフィールドを別の値に設定することを許可または拒否するルールが必要です。
問題は、バリデーターは新しい値だけを受け取るだけですが、古い値もチェックしたいのです。
laravel 5.3では、モデルのルールの現在のインスタンスのパラメータとして渡すことはできますか?laravelのバリデーターに現在のインスタンスを渡す
私のモデルのいくつかのフィールドの現在の値をチェックし、このフィールドを別の値に設定することを許可または拒否するルールが必要です。
問題は、バリデーターは新しい値だけを受け取るだけですが、古い値もチェックしたいのです。
:
あなたは、静的メソッド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
});
私が正しく理解していれば、exists
の検証ルールが考えられますか? Laravelのdoc:https://laravel.com/docs/5.3/validation#rule-exists
メソッドを使用して検証前に古い値を追加することができます。これはまだ必要な場合
public function store(Request $request)
{
$request->merge(['old_key' => 'Value']);
$this->validate($request, [
'old_key' => 'required'
]);
}
なし、私はデータベースを照会する必要はありません。現在のインスタンスを検証ルールに渡したいと思います。 –