[英]Laravel: custom multidimensional array validation
我有一個表單,用戶將一次插入許多記錄。 每條記錄都有一個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數據相同的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.