在laravel 5.3中,我可以作为模型的规则当前实例的参数传递吗?
我想要检查模型中某些字段的当前值的规则,并允许或拒绝将此字段设置为其他值。
问题是:验证器只接收新值,但我也想查看旧值。
答案 0 :(得分:1)
您可以使用merge
方法在验证前添加旧值。
public function store(Request $request)
{
$request->merge(['old_key' => 'Value']);
$this->validate($request, [
'old_key' => 'required'
]);
}
答案 1 :(得分:1)
如果仍有必要:
您可以使用静态方法$customAttributes
的第四个参数Illuminate\Support\Facades\Validator::make
。在这个参数中,你可以传递你想要的任何东西,在你的案例中特定的模型实例:
$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
});
答案 2 :(得分:0)
如果我理解正确,您可能会考虑exists
验证规则?在Laravel doc:https://laravel.com/docs/5.3/validation#rule-exists