我知道如何验证多个类别,如:
'categories' => 'required|array',
'categories.*' => 'required|exists:categories,id'
但我不知道如何验证每个类别的子类别
@foreach($attributes as $attribute)
@if(count($attribute['properties']) > 0)
<div class="form-group">
<label class="col-md-4 control-label">{{ $attribute['title']}} <span class="text-danger">*</span></label>
<div class="col-md-6">
<select class="form-control {{($attribute['select_many'] == 1) ? 'mt-select2' : ''}} dynamic attribute_{{$loop->index}}" name="attribute[{{$attribute['id']}}][]" {{($attribute['select_many'] == 1) ? 'multiple' : ''}} required style="width: 100%">
<option value="">Select</option>
@foreach ($attribute['properties'] as $key => $value)
<option value="{{$key}}" {{( in_array( $key, ( empty($propertiesSelected) ) ? [] : array_unique($propertiesSelected[$attribute['id']]) ) ) ? 'selected' : '' }}>{{$value}}</option>
@endforeach
</select>
</div>
</div>
@endif
@endforeach
据我所知,你可以添加一个额外的.field_name
,所以你的代码将是例如:
'categories.*.name' => 'required|exists:categories,id'
如果您需要更多选项,也可以参考Validator Doc,它写得非常好。
你必须添加一个custom validation rule,这是一个例子:
在AppServiceProvider
方法下的boot
类中:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
// Extend laravel validation rules
Validator::extend('subcategories_exist', function ($attribute, $categories, $parameters, $validator) {
// $categories represent the incoming categories value from client
foreach ($categories as $subCategories) {
foreach ($subCategories as $category_id) {
// check category existence in database
return App\Category::where('id', $category_id)->count() === 1;
}
}
});
}
...
}
控制器:
'categories' => 'required|array|subcategories_exist',