I have a filtration page to get the posts according to user choices, I want to give the user the ability to choose multiple ways to filter, such as the price, post date, category, …etc. therefore I should append the user’s previous choices.
for example ex: example.com?category=1
and now the user wants to filter with price, it should be. ex: example.com?category=1&price=200
it works for me while trying <a></a>
tag,
ex <a href="{{ route('posts', array_merge(request()->input(), ['price' => 200])) }}">price 200</a>
.
so I need to do the same with form GET
, here’s how I tries to solve it:
{!! Form::open(
[
'route' => [Request::route()->getName(), request()->input()],
'method' => 'GET'
]) !!}
@foreach ($specialisms as $specialism)
<div class="custom-control custom-checkbox">
{!! Form::checkbox('specialism', $specialism->id, request('specialism') == $specialism->id, ['class' => 'custom-control-input', 'id' => Str::snake($specialism->title['en']), 'onchange' => '$(this).parent().parent().submit()']) !!}
<label class="custom-control-label" for="{{ Str::snake($specialism->title['en']) }}">{{ $specialism->lang_title }}</label>
</div>
@endforeach
{!! Form::close() !!}
but it doesn’t work, it always removes all parameters and append-only the parameter for the form input
Advertisement
Answer
you should modify:
checkbox name :specialism[]
and condition: in_array($specialism->id, request('specialism'))
to be :
{!! Form::open([
'route' => [Request::route()->getName(), request()->input()],
'method' => 'GET',
]) !!}
@foreach ($specialisms as $specialism)
<div class="custom-control custom-checkbox">
{!! Form::checkbox('specialism[]', $specialism->id, in_array($specialism->id, request('specialism')), ['class'
=> 'custom-control-input', 'id' => Str::snake($specialism->title['en']), 'onchange' =>
'$(this).parent().parent().submit()']) !!}
<label class="custom-control-label"
for="{{ Str::snake($specialism->title['en']) }}">{{ $specialism->lang_title }}</label>
</div>
@endforeach
{!! Form::close() !!}