将当前实例传递给laravel中的验证器

时间:2017-02-06 10:35:18

标签: php laravel laravel-validation

在laravel 5.3中,我可以作为模型的规则当前实例的参数传递吗?

我想要检查模型中某些字段的当前值的规则,并允许或拒绝将此字段设置为其他值。

问题是:验证器只接收新值,但我也想查看旧值。

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