【问题标题】:Pass current instance to validator in laravel将当前实例传递给 laravel 中的验证器
【发布时间】:2017-05-31 03:50:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: php laravel laravel-validation


    【解决方案1】:

    如果仍然需要:

    您可以使用静态方法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
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用merge 方法在验证之前添加旧值。

      public function store(Request $request) 
      {
           $request->merge(['old_key' => 'Value']);
           $this->validate($request, [
               'old_key' => 'required'
           ]);
      }
      

      【讨论】:

        【解决方案3】:

        如果我理解正确,您可能会想到exists 验证规则?在 Laravel 文档中:https://laravel.com/docs/5.3/validation#rule-exists

        【讨论】:

        • 不,我不需要查询数据库。我想将当前实例传递给验证规则。
        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 2017-01-02
        • 2017-02-13
        • 2015-02-27
        • 1970-01-01
        相关资源
        最近更新 更多