【发布时间】:2017-05-31 03:50:30
【问题描述】:
在 laravel 5.3 中,我可以将模型的规则当前实例作为参数传递吗?
我想要检查模型中某些字段的当前值并允许或拒绝将此字段设置为另一个值的规则。
问题是:验证器只接收新值,但我也想检查旧值。
【问题讨论】:
标签: php laravel laravel-validation
在 laravel 5.3 中,我可以将模型的规则当前实例作为参数传递吗?
我想要检查模型中某些字段的当前值并允许或拒绝将此字段设置为另一个值的规则。
问题是:验证器只接收新值,但我也想检查旧值。
【问题讨论】:
标签: php laravel laravel-validation
如果仍然需要:
您可以使用静态方法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
});
【讨论】:
您可以使用merge 方法在验证之前添加旧值。
public function store(Request $request)
{
$request->merge(['old_key' => 'Value']);
$this->validate($request, [
'old_key' => 'required'
]);
}
【讨论】:
如果我理解正确,您可能会想到exists 验证规则?在 Laravel 文档中:https://laravel.com/docs/5.3/validation#rule-exists
【讨论】: