Я работаю над приложением Laravel, в котором собираю некоторые поля ввода, состоящие из выпадающих полей на некоторых картах, в результате чего я отправляю их в бэкэнд через AJAX.
В бэкэнде я хочу создать логику проверки, посредством которой должен быть *1003* только один муж или жена из выпадающих входов, захваченных во внешнем интерфейсе. Это означает, что пользователь должен выбрать только одного мужа или жену из выпадающего списка на карточках навнешний интерфейс
Шаблон формы
<form method="POST" action="#" id="phase3" accept-charset="UTF-8">
<!-- CSRF TOKEN-->
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
<!-- Card 1-->
<div class="col-md-4 col-sm-12 phonecard3">
<div class="innerDiv">
<!-- Gender -->
<div class="row">
<label class="fm-input"> Relation :</label>
<select class="fm-input otherMenu" id="relation1" required>
<option value="Husband"> Husband </option>
<option value="Wife"> Wife </option>
<option value="Son"> Son </option>
<option value="Daughter"> Daughter </option>
</select>
</div>
<!-- END -->
</div>
</div>
<!-- End card 1-->
<!-- Card 2-->
<div class="col-md-4 col-sm-12 phonecard3">
<div class="innerDiv">
<!-- Gender -->
<div class="row">
<label class="fm-input"> Relation :</label>
<select class="fm-input otherMenu" id="relation2" required>
<option value="Husband"> Husband </option>
<option value="Wife"> Wife </option>
<option value="Son"> Son </option>
<option value="Daughter"> Daughter </option>
</select>
</div>
<!-- END -->
</div>
</div>
<!-- End card 2-->
<!-- Card 3-->
<div class="col-md-4 col-sm-12 phonecard3">
<div class="innerDiv">
<!-- Gender -->
<div class="row">
<label class="fm-input"> Relation :</label>
<select class="fm-input otherMenu" id="relation3" required>
<option value="Husband"> Husband </option>
<option value="Wife"> Wife </option>
<option value="Son"> Son </option>
<option value="Daughter"> Daughter </option>
</select>
</div>
<!-- END -->
</div>
</div>
<!-- End card 3-->
<div class="row">
<div class="col-md-6 col-md-offset-3">
<button class="btn btn-lg lov1" type="submit"> Save & Create for Spouse & Children <i class="fa fa-check-circle" ></i></button>
</div>
</div>
</form>
AJAX-код для отправки деталей формы
$("#phase3").submit(function( event ) {
event.preventDefault();
//Fetch data
var token = $('#token').val();
var relation1 = $("#relation1").val();
var relation2 = $("#relation2").val();
var relation3 = $("#relation3").val();
//Store in a JS object
var type ={
'token': token,
//Relations
'relation1' : relation1,
'relation2' : relation2,
'relation3' : relation3
};
//console.log(type);
$.ajax({
type: "POST",
url: "submitPhase3",
data:JSON.stringify(type),
contentType: 'application/json',
dataType: "json",
success: function(response){
//console.log(response);
},
//Alert errors from backend
error: function(data) {
//console.log(data);
}
});
});
Backend PHPфункция для обработки запроса
public function submitPhase3(Request $request){
dd($request->all());
$validation = $this->validate($request, [
//Relations
'relation1'=> isset($request->relation1) ? $request->relation1 : null,
'relation2'=> isset($request->relation2) ? $request->relation2 : null,
'relation3'=> isset($request->relation3) ? $request->relation3 : null,
]
);
}
Пользовательский валидатор в файле App / Providers / AppServiceProvider.php
public function boot(){
//Custom Validation
Validator::extend('relation',
function ($attribute, $value, $parameters, $validator){
$relationMaxMap = [];//create a map with key=>'value', value=>'maximum'
$relations = Config::get('app.relations');
foreach($relations as $relation) {
$relationMaxMap[$relation['value']] = $relation['maximum'];
}
//$relationMaxMap will be [1=>1, 2=>1,3=>10,4=>10];
$requestMap = []; //map from the request 'value'=>'count', this way you know what relations has been selected and how many times
foreach($values as $value) {
if(!isset($values[$value])) { //at the begining
$requestMap[$value] = 1;
}
$requestMap[$value]++;
}
//Compare the maps to check if it execedes the maximum allowed in your app
foreach($relationMaxMap as $value=>$maximum) {
if($requestMap[$value] > $maximum) {
return false;
}
}
return true;
});
}
Новая функция
public function submitPhase3(Request $request){
dd($request->all());
$validation = $this->validate($request, [
//Pull code from custom validator
'relation' => 'relation'
]
);
}