簡體   English   中英

Laravel:自定義多維數組驗證

[英]Laravel: custom multidimensional array validation

我有一個表單,用戶將一次插入許多記錄。 每條記錄都有一個id ,一個開始日期和一個結束日期 要處理輸入數據,我正在尋找驗證所有這些事情的最佳方法。

  • 我必須要求至少一條記錄
  • 對於每個輸入的記錄, id應存在於另一個表中, 日期開始結束日期應為有效日期, 結束日期應早於開始日期

所以我需要在這里進行某種多維數組驗證...是否有任何自定義驗證插件/代碼已編碼?

我試圖擴展Laravel驗證,但我無法接近我想要的...

我嘗試過的:

app / services / validators / LearningPathValidator.php (我正在使用laravel-extended-validator

<?php

use Crhayes\Validation\ContextualValidator;

class LearningPathValidator extends ContextualValidator
{
    protected $rules = [
        'default' => [
            'name'    => 'required|max:96',
            'courses' => 'required|multi_array:course_id=required;exists:courses,date_start=required;date_format:d/m/Y,date_end=required;date_format:d/m/Y'
        ],
    ];
}

app / validations.php (這里我擴展了Illuminate \\ Validation \\ Validator類)

<?php

class AppValidator extends Illuminate\Validation\Validator
{
    protected function validateMultiArray($attribute, $value, $parameters)
    {
        if (!is_array($value)) {
            return false;
        }

        foreach ($parameters as $parameter) {
            list($_attribute, $rules) = $this->parseRule(
                str_replace(['=', ';'], [':', ','], $parameter));

            foreach ($rules as $rule) {
                foreach (array_keys(Input::get($attribute)) as $idx){
                    $this->validate(sprintf('%s.%d.%s', $attribute, $idx,
                        snake_case($_attribute)), $rule);
                }
            }
        }

        return count($this->messages->all()) === 0;
    }
}

我的開始/ global.php :(這里我用AppValidator擴展了Illuminate \\ Validation \\ Validator

// ...

Validator::resolver(function($translator, $data, $rules, $messages) {
    return new AppValidator($translator, $data, $rules, $messages);
});

// ...

我的模型使用courses[$index][course_id]courses[$index][date_start]courses[$index][date_end]作為字段名稱。

實際上我不能要求至少一條記錄,正如我之前所說,我無法保證結束日期將比開始日期更早。 有沒有重寫我編碼的建議? 先感謝您!

我創建了一個包來做這個,因為我遇到了與AngularJS數據相同的問題。

https://github.com/lakedawson/vocal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM