Laravel: передача выбранных значений в функцию маршрута из выпадающего списка - PullRequest
0 голосов
/ 10 октября 2019

У меня есть раскрывающийся список, в котором я хочу выбрать значение и изменить его в таблице MYSQL, вызвав функцию изменения.

В раскрывающемся списке:

<td>
    {{-- {{ $ticket->priority}} --}}
    <div class="form-group{{ $errors->has('priority') ? 'has-error': '' }}">
        <div class="col-md-6">
            <select id="priority" type="" class="form-control" name="priority"
                onchange="{{ url('admin/updatePriority/',['ticket_id' => $ticket->ticket_id, 'priority'=> value ] )}}">
                <option value="">{{ $ticket->priority}}</option>
                <option value="Low">Low</option>
                <option value="Moderate">Moderate</option>
                <option value="High">High</option>
            </select>
        </div>
    </div>
</td>

Функция в Маршрутах:

Route::group(['prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::get('tickets', 'TicketsController@index');
    Route::post('close_ticket/{ticket_id}', 'TicketsController@close');
    Route::post('updatePriority/{ticket_id}/{priority}', 'TicketsController@updatePriority');
});

Код функции:

public function updatePriority($ticket_id, $priority)
{
    $ticket = Ticket::where('ticket_id', $ticket_id)->firstOrFail();
    $ticket->priority = $priority;
    $ticket->save();
}

Когда я делаю выбор из выпадающего списка, onchange функция не срабатывает, поэтому значение в таблице остается неизменным.

Кто-нибудь может указать мне правильное направление на это?

1 Ответ

0 голосов
/ 10 октября 2019

Слушатели событий HTML ожидают вызова кода Javascript или функций, URL-адрес недопустим в таком контексте

Вот что вы можете сделать

<td>
    <div class="form-group{{$errors->has('priority') ? 'has-error': '' }}">
        <div class="col-md-6">
            <select id="priority" type="" class="form-control" name="priority" onchange="change({{ $ticket->ticket_id }}, this.value)">
                <option value="">{{ $ticket->priority}}</option>
                <option value="Low">Low</option>
                <option value="Moderate">Moderate</option>
                <option value="High">High</option>
            </select>
        </div>
    </div>
</td>

<script>
    function change(ticket_id, priority) {
    const response = fetch('/admin/updatePriority/' + ticket_id + '/' + priority, {
        headers: {
            "Content-Type": "application/json",
            "Accept": "application/json",
            "X-Requested-With": "XMLHttpRequest",
            "X-CSRF-Token": document.head.querySelector('meta[name="csrf-token"]')
        },
        method: "post",
    });
    console.log(JSON.stringify(response));
}
</script>

Это использует собственный API выборки Ajax длявыполнить запрос к URI с динамически изменяемым значением элемента select в качестве параметра

Обратите внимание, что вам все равно нужно иметь дело с заголовком CSRF и правильно вызывать параметры в контроллере из объекта запроса

Надеюсь, это поможет

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