#laravel #forms #filter #bootstrap-4 #laravelcollective
#laravel #формы #Фильтр #bootstrap-4 #laravelcollective
Вопрос:
Я создаю веб-приложение mall directory. Я хотел бы отобразить список групп клиентов на основе опции выпадающего списка. (группировать по зонам / этажам / категориям)
Изначально я пытался передать выбранную опцию из выпадающего списка зоны в форме в DirectoryController через маршруты, но я не смог этого сделать.
<!-- Part of the View -->
<div class = "panel-body bg-light">
{{ Form::open(array('route' => array('directory.group', '$tenants', 'zone_id'))) }}
<div class = "container-fluid bg-default">
<table class="table table-borderless">
<thead>
<th scope="col"><strong>ZONE<strong></th>
<th scope="col"><strong>FLOOR<strong></th>
<th scope="col"><strong>CATEGORY<strong></th>
</thead>
<tbody>
<tr>
<td>
<!-- Zone -->
<div>
{!! Form::select('zone_id',
Zone::pluck('code', 'id'), null, [
'class' => 'form-control',
'placeholder' => '- Select Zone -',
'onchange' => 'this.form.submit()'
] )
!!}
</div>
</td>
<td>
<!-- Floor -->
<div>
{!! Form::select('floor_id',
Floor::pluck('code', 'id'), null, [
'class' => 'form-control',
'placeholder' => '- Select Zone -',
]) !!}
</div>
</td>
<td>
<!-- Category -->
<div>
{!! Form::select('category_id',
Category::pluck('name', 'id'), null, [
'class' => 'form-control',
'placeholder' => '- Select Zone -',
]) !!}
</div>
</td>
</tr>
</tbody>
</table>
</div>
{!! Form::close() !!}
</div>
DirectoryController
/**
* Show the application dashboard.
* @param array $tenants
* @param int $zone_id
*
* @return IlluminateHttpResponse
*/
public function group($tenants, $zone_id)
{
$tenants = $tenants->where('zone_id', $zone_id);
return view('directory.index', [
'tenants' => $tenants,
]);
}
Моя концепция заключается в передаче списка арендаторов в DiretoryController @group, и функция будет фильтровать на основе выбранной опции выпадающего списка и передавать новый список арендаторов обратно в представление и отображать его.
Я был бы очень признателен, если бы было какое-либо предложение или решение.
Комментарии:
1. Если одно из приведенных ниже сообщений ответило на ваш вопрос, пожалуйста, можете ли вы пометить его как принятый 🙂 Спасибо.
Ответ №1:
Вы можете привязать onchange для выбора и вызова ajax при каждом событии изменения.
$(document).ready(function () {
$('#zone_id').on('change',function () {
var id = this.value;
$.ajax({
type: 'GET',
url: 'url',
data: {
id:id
},
dataType: 'json',
success: function (json) {
$('#zone_id').html(' ');
$.each(json, function(i, value) {
$('#zone_id').append($('<option>').text(value).attr('value', i));
});
}
});
});
});
Комментарии:
1. Спасибо за вашу помощь! Это много значило для меня.
Ответ №2:
Значения из формы не будут передаваться в качестве параметров методу контроллера, вам нужно будет использовать форму класса Request для этого. Вы можете либо использовать вспомогательную функцию request():
request()->input('zone_id');
или
public function group(IlluminateHttpRequest $request, $tenants)
{
$tenants = $tenants->where('zone_id', $request->input('zone_id'));
return view('directory.index', [
'tenants' => $tenants,
]);
}
Комментарии:
1. Спасибо за вашу помощь! Надеюсь, у вас хороший день