I need help with saving a selected option after validation fails.
Here is main.blade.php
<form method="POST" action="{{ url('/main') }}">
<select id="searchEngine" name="searchEngine">
<option value="google">Google</option>
<option value="bing">Bing</option>
<option value="duckduck">DuckDuckGo</option>
</select>
@if ($errors->has('searchEngine'))
<div style="background-color: #faa;">
@foreach ($errors->all() as $error)
{{ $error }}
@endforeach
</div>
@endif
</form>
Controller looks like:
request()->validate(
['searchEngine' => "required|in:google,duckduck"],
['searchEngine.in' => $searchEngine.' not working, try another']
);
I tried this, but it always returns only the last option:
<option value="google" {!! $errors->has('searchEngine') ? 'selected' : '' !!}>Google</option>
<option value="bing" {!! $errors->has('searchEngine') ? 'selected' : '' !!}>Bing</option>
<option value="duckduck" {!! $errors->has('searchEngine') ? 'selected' : '' !!}>DuckDuckGo</option>
Advertisement
Answer
If I understood you correctly you want to keep the previously selected option selected when the validation fails.
<select id="searchEngine" name="searchEngine">
<option value="google" {{ old('searchEngine') == 'google' ? 'selected' : '' }}>Google</option>
<option value="bing" {{ old('searchEngine') == 'bing' ? 'selected' : '' }}>Bing</option>
<option value="duckduck" {{ old('searchEngine') == 'duckduck' ? 'selected' : '' }}>DuckDuckGo</option>
</select>
Less repetitive solution with a @foreach:
<select id="searchEngine" name="searchEngine">
@foreach(['google' => 'Google', 'bing' => 'Bing', 'duckduck' => 'DuckDuckGo'] as $key => $value)
<option value="{{ $key }}" {{ old('searchEngine') === $key ? 'selected' : '' }}>{{ $value }}</option>
@endforeach
</select>