Laravel: Добавить атрибут 'selected' в HTML опцию выбора, либо из более старого значения, либо из db - PullRequest
0 голосов
/ 26 мая 2020

Я использую laravel 7 для своего веб-приложения, в котором у меня один и тот же маршрут как для создания, так и для редактирования проекта. Когда я редактирую проект, мне нужно иметь возможность загрузить мое представление со значениями базы данных проекта. Но когда я изменяю некоторые поля и пытаюсь отправить форму, в случае, если я получаю ошибку проверки, ожидаемым поведением будет перезагрузка представления со `` старыми '' значениями, и если старых значений нет (что означает, что у меня есть ничего не менял в соответствующих полях), то с теми, что идут из дб. Проблема в том, что я, похоже, не могу найти хороший способ сохранить атрибут «старый выбранный» после неудачной проверки.

<select id="client" name="client" type="select">
<option {{(isset($project) && $project->client == 'o1') || old('client') == 'o1' ? 'selected' : ''}} value="o1">o1</option>
<option {{(isset($project) && $project->client == 'o2') || old('client') == 'o2' ? 'selected' : ''}} value="o2">o2</option>
<option {{(isset($project) && $project->client == 'o3') || old('client') == 'o3' ? 'selected' : ''}} value="o3">o3</option>

Так, например, если у меня есть o3 в моей базе данных, когда я загружаю проект для его редактирования, меняю его на o1, не проходит проверка в другом поле, когда представление перезагружается, вместо o1 будет быть выбранным. Есть предложения?

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Вы можете сделать это, как показано ниже:

@php
$client = (isset($project)) ? $project->client : '';
if ($errors->any())
{
    $client = request()->old('client');
}
@endphp

<option {{ $client == 'o1' ? 'selected' : ''}} value="o1">o1</option>
<option {{ $client == 'o2' ? 'selected' : ''}} value="o2">o2</option>
<option {{ $client == 'o3' ? 'selected' : ''}} value="o3">o3</option>
1 голос
/ 26 мая 2020

Вам не нужно писать длинные условия, вы можете сделать как показано ниже.

<option {{ old('client', $project->client) == 'o1' ? 'selected' : '' }} value="o1">o1</option>
<option {{ old('client', $project->client) == 'o2' ? 'selected' : '' }} value="o2">o2</option>
<option {{ old('client', $project->client) == 'o3' ? 'selected' : '' }} value="o3">o3</option>
0 голосов
/ 26 мая 2020

Вы можете использовать @if, чтобы увидеть, установлена ​​ли уже опция, когда страница перезагружается или не проходит проверку ..

<option value="">Select an answer...</option>
<option value="o1"
 @if($project->client == 'o1' || old('client') == 'o1')
 selected="selected"
 @endif()
>o1</option>

Это всегда срабатывало для меня. Я думаю, что это может иметь какое-то отношение к вашему isset(), поскольку он не проверяет, установлена ​​ли переменная, а скорее то, каково на самом деле значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...