#php #arrays #laravel
#php #массивы #laravel
Вопрос:
Я все еще новичок в Laravel. Я уже пытался проверить свое поле массива, но оно кажется неудачным и выдает ошибку (что-то о подсчете в строке if (count($request->defect_id) > 0)
, если я удаляю required
в моем представлении блейда). Вот мой код:
ComplaintController.php
public function store(Request $request)
{
if (count($request->defect_id) > 0) {
foreach ($request->defect_id as $item => $v) {
if (isset($request->image[$item])) {
$images = $request->file('image');
$image_resize = Image::make($images[$item]->getRealPath());
$image_resize->resize(900, 630);
$filename = $images[$item]->getClientOriginalName();
$image_resize = Image::make($images[$item]->getRealPath());
$image_resize->resize(300, 210);
$image_resize->save('complaint/' . $filename);
}
$data = array(
'defect_id' => $request->defect_id[$item],
'image' => $filename,
'description' => $request->description[$item],
);
Complaint::insert($data);
}
return redirect()->back()->with('success', 'Your report is submitted!');
}
}
Что я пробовал для проверки:
$this->validate($request,[
'defect_id'=>'exists:complaints,defect_id',
'image.*'=>'mimes:jpeg,png,jpg,gif,svg|max:10000',
'description'=>'required|max:255',
]);
$validator = Validator::make($request->all(),[
'defect_id' => 'required|array',
'image' => 'required|array|image|mimes:jpeg,png,jpg,gif,svg',
'description' => 'required|array|max:255',
]);
$rules = [
'defect_id' => 'required',
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg',
'description' => 'required|max:255',
];
$messages = [
'defect_id.required' => 'Types of defect is required',
'image.required' => 'Image is required',
'description.required' => 'Description is required',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return Response::json(array('errors' => $validator->getMessageBag()->toArray()));
}
else {
$data = array(
'defect_id' => $request->defect_id[$item],
'image' => $filename,
'description' => $request->description[$item],
}
form.blade.php
<div class="panel-heading">
<h3 class="panel-title"><strong>Make New Report</strong></h3>
</div>
<div class="panel-body">
<div>
<div class="panel">
<form action="{{ url('/complaint-store') }}" method="post" enctype="multipart/form-data">
@csrf
<table class="table">
<thead>
<tr>
<th>Type of Defect</th>
<th>Image</th>
<th>Description</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<select class="form-control" name="defect_id[]" required>
<option disabled selected>Choose defect</option>
@foreach(AppDefect::all() as $defect)
<option value="{{$defect->id}}">{{$defect->name}}</option>
@endforeach
</select>
</td>
<td>
<input type="file" class="form-control-file" name="image[]" required>
</td>
<td>
<textarea class="form-control" rows="2" name="description[]" required></textarea>
</td>
<td>
<button type="button" class="btn btn-info btn-sm" id="add-btn"><i class="glyphicon glyphicon-plus"></i></button>
</td>
</tr>
</tbody>
</table>
<center><button type="submit" class="btn btn-primary" >Submit</button></center>
<br>
</form>
</div>
</div>
</div>
@section('footer')
<script>
$(document).ready(function () {
$('#add-btn').on('click',function () {
var html = '';
html = '<tr>';
html = '<td><select class="form-control" name="defect_id[]" required><option value="" selected>Choose Defect</option>@foreach(AppDefect::all() as $defect)<option value="{{$defect->id}}">{{$defect->name}}</option>@endforeach</td>';
html = '<td><input type="file" class="form-control-file" name="image[]" required></td>';
html = '<td><textarea class="form-control" rows="2" name="description[]" required></textarea></td>';
html = '<td><button type="button" class="btn btn-danger btn-sm" id="remove-btn"><i class="glyphicon glyphicon-minus"></i></button></td>';
html = '</tr>';
$('tbody').append(html);
})
});
$(document).on('click','#remove-btn',function () {
$(this).closest('tr').remove();
});
</script>
@stop
Я надеюсь, что кто-нибудь сможет мне помочь в этом коде. Заранее благодарю.
Комментарии:
1. Какую ошибку вы получили?
2. Если я правильно понял, вы ожидаете массив из
select
поля HTML, но он возвращает только одно значение, которое является выбранной опцией. Вот почемуdefect_id
не является счетным (~ array). Смотрите примеры правильногоselect
использования здесь: w3schools.com/tags/tag_select.asp
Ответ №1:
Это потому $request->defect_id
, что is null
, count
не работает со null
значением (начиная с php 7 )
вы можете изменить, как показано ниже: $request->defect_id
сначала проверьте, затем посчитайте.
if ($request->defect_id != null amp;amp; count($request->defect_id) > 0) {
....
}