УДАЛИТЬ 405 (метод не разрешен) - Laravel с Axios

В основном я пытаюсь удалить строку с помощью axios, но я продолжаю получать DELETE 405 (Method Not Allowed)

Это мой маршрут API для удаления:

Route::delete('/vehicles/{id}', [VehiclesController::class, 'destroy']);

В контроллере:

public function destroy($id)
{
    
    $vehicleDelete = Vehicle::findOrFail($id);
    $vehicleDelete->delete();

    return response()->json([
        "status" => true
    ], 200);

}

Кнопка в интерфейсе:

<button class = 'btn btn-danger' onclick = "deleteBtn(${item.id})">Delete</button>

Я попытался использовать console.info, чтобы убедиться, что я получаю правильный идентификатор, и он действительно получает правильный.

А вот функция axios:

const deleteBtn = (id) => {
        axios.delete("api/vehicles/" + id)
        .then(response => {
                console.info(id);
            })
    }

код выглядит хорошо. Попробуйте php artisan route:clear

John Lobo 16.02.2023 16:01

@JohnLobo Я попробовал это сейчас, все то же самое

Raitiko 16.02.2023 16:10

попробуйте добавить return false в конце вашей функции deleteBtn

apokryfos 16.02.2023 16:13

@apokryfos Ничего не менял

Raitiko 16.02.2023 16:16

Каков полный URL-адрес, на который попадает этот DELETE запрос? Это может быть неправильный URL-адрес, в зависимости от страницы, с которой вы отправляете запрос. Возможно, вам придется сделать axios.delete(`/api/vehicles/${id}`) (т. е. включить ведущий /).

Tim Lewis 16.02.2023 18:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
5
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробовав почти все, вот решение, с которым я случайно пришел:

Маршрут API:

Route::delete('/vehicles/{id}', [VehiclesController::class, 'destroy']);

Метод уничтожения в контроллере:

    public function destroy($id)
    {

    $vehicle = Vehicle::find($id);

    if (!$vehicle) {
        return response()->json(["error" => "Vehicle does not exist!!"]);
    }

    if ($vehicle->delete()) {
        return response()->json(["success" => "Vehicle deleted!!"]);
    }

    return response()->json(["error" => "Something bad happened!!"]);

    }

фронтальная кнопка:

<button class = 'btn btn-danger' onclick = "deleteBtn(${item.id})">Delete</button>

И, наконец, функция javascript:

const deleteBtn = (id) => {
        axios.delete(API.url + (API.routes.deleteVehicles.replace("{id}", id)))
        .then(response => {
            vehicleTable.innerHTML = "";
            drawVehicles();
        })
    }

Для справки вот объект API:

const API = {
        url: 'http://127.0.0.1:8000/api',
        routes: {
            getVehicles: '/vehicles',
            deleteVehicles: '/vehicles/{id}',
            createVehicles: '/vehicles'
        }
    }

Хорошее решение! Просто будьте осторожны с жестким кодированием API.url; это может измениться в зависимости от вашего файла .env и config/app.php. Хорошая вещь, которую вы можете сделать, это назвать свои маршруты, например Route::delete(...)->name('api.vehicles.delete'), затем использовать этот URL-адрес в качестве атрибута данных: <button data-url = "{{ route('api.vehicle.delete', ['id' => ':vehicleId']) }}" ...>, а затем в обработчике кликов: axios.delete(button.data('url').replace(':vehicleId', 'id)). Это гарантирует (если не изменено) URL-адрес правильный (использует вашу конфигурацию PHP) и заменяет :vehicleId допустимым целым числом из вашей id переменной JS.

Tim Lewis 16.02.2023 19:11

Другие вопросы по теме