在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
您可以使用merge
方法在驗證之前添加舊值。
public function store(Request $request)
{
$request->merge(['old_key' => 'Value']);
$this->validate($request, [
'old_key' => 'required'
]);
}
沒有,我不需要查詢數據庫。我想將當前實例傳遞給驗證規則。 –