路线 vehiculos/7676729/edit 不支持 PUT 方法。支持的方法:GET、HEAD

问题描述 投票:0回答:1

我正在尝试了解 PHP Laravel,但不知道如何进行此 put 操作。 基本上我的数据库是用 artisan 创建的,车辆表很简单。

Schema::create('vehiculos', function (Blueprint $table) {
            $table->string('id')->foreign('idFk')->references('id')->on('clientes')->onDelete('cascade');
            $table->string('marca');
            $table->string('modelo');
            $table->year('anio');
            $table->string('matricula')->primary();
            $table->timestamps();
        });

我只是希望能够更改车辆数据,当然不能更改 id 或 matricula(车牌),除了使用 PUT 操作之外一切顺利。给我这个错误:路线 vehiculos/7676729/edit 不支持 PUT 方法。支持的方法:GET、HEAD。

令我困惑的是,我在另一个类(即客户端)中做同样的事情,我在其中更新它并像魅力一样工作,但这里却没有。

这是我的 VehiculoController.php

public function update(Request $request, Vehiculo $vehiculo) {
        // Define las reglas de validación
        $request->validate([
            'matricula' => 'required|unique:vehiculos' . $vehiculo->matricula,
            'id' => 'required' . $vehiculo->id,
            'marca' => 'required',
            'modelo' => 'required',
            'anio' => 'required',
        ]);
        $vehiculo->update($request->all());
        return redirect()->route('vehiculos.listar')->with('success', 'Vehiculo
        actualizado con éxito.');
    }

我的 web.php

Route::get('/', function () {
    return view('welcome');
});

Route::get('/clientes', [ClienteController::class, 'index'])->name('clientes.index');

Route::resource('clientes', ClienteController::class)
    ->names([
        'index' => 'clientes.listar',
        'create' => 'clientes.crear',
        'store' => 'clientes.guardar',
        'show' => 'clientes.ver',
        'edit' => 'clientes.editar',
        'update' => 'clientes.actualizar',
        'destroy' => 'clientes.eliminar',
    ]);

Route::resource('vehiculos', VehiculoController::class)
    ->names([
        'index' => 'vehiculos.listar',
        'create' => 'vehiculos.crear',
        'store' => 'vehiculos.guardar',
        'show' => 'vehiculos.ver',
        'edit' => 'vehiculos.editar',
        'update' => 'vehiculos.actualizar',
        'destroy' => 'vehiculos.eliminar',
    ]);

我的edit.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Editar vehiculos</title>
</head>

<body>
    <h1>Modificar vehiculo</h1>
    @if (session('success'))
        <div>{{session('success')}}</div>
    @endif
    <form action="{{route('vehiculos.editar', $vehiculo->matricula)}}" method="POST">
        @csrf
        @method("PUT")
        <label for="matricula" >matricula:</label>
        <input type="text" name="matricula" value="{{$vehiculo->matricula}}" readonly>
        <label for="id">id:</label>
        <input type="text" name="id" value="{{$vehiculo->id}}" readonly>
        <label for="marca">marca:</label>
        <input type="text" name="marca" value="{{$vehiculo->marca}}">
        <label for="modelo">modelo:</label>
        <input type="text" name="modelo" value="{{$vehiculo->modelo}}">
        <label for="anio">anio:</label>
        <input type="text" name="anio" value="{{$vehiculo->anio}}">
        <button type="submit">ENVIAR</button>

        @if ($errors->all())
            @foreach ($errors->all() as $error)
            <ul>
            <li>{{$error}}</li>
            </ul>
            @endforeach
            
        @endif
    </form>
</body>

还有我的index.blade.php

<h1>Lista de vehiculos</h1>
    @if(session('success'))
    <div style="color: green;">
        {{ session('success') }}
    </div>
    @endif
    <a href="{{ route('vehiculos.crear') }}">Crear Nuevo vehiculo</a>
    <ul>
        @foreach ($vehiculos as $vehiculo)
        <li>{{ $vehiculo->marca }} - {{ $vehiculo->modelo }}
            <a href="{{ route('vehiculos.ver', $vehiculo -> id) }}">Ver</a>
            <a href="{{ route('vehiculos.editar', $vehiculo -> id) }}">Editar</a>
            <form action="{{ route('vehiculos.eliminar', $vehiculo -> id) }}" method="POST">
                @csrf
                @method('DELETE')
                <button type="submit">Eliminar</button>
            </form>
        </li>
        @endforeach
    </ul>

当我启动工匠路线时,我的路线也可用于车辆:列表

GET|HEAD        vehiculos ................................................................ vehiculos.listar › VehiculoController@index
  POST            vehiculos ............................................................... vehiculos.guardar › VehiculoController@store
  GET|HEAD        vehiculos/create ......................................................... vehiculos.crear › VehiculoController@create
  GET|HEAD        vehiculos/{vehiculo} ......................................................... vehiculos.ver › VehiculoController@show
  PUT|PATCH       vehiculos/{vehiculo} ................................................ vehiculos.actualizar › VehiculoController@update
  DELETE          vehiculos/{vehiculo} ................................................. vehiculos.eliminar › VehiculoController@destroy
  GET|HEAD        vehiculos/{vehiculo}/edit ................................................. vehiculos.editar › VehiculoController@edit

发出 PUT 请求并更改数据,例如车辆的年份或型号,并在数据库中看到它的变化,但每当我尝试或将 PUT 更改为 PATCH 时都会出现相同的错误。

编辑:还将该行中的方法更改为 PUT 会得到相同的结果,但没有错误,它只是什么也不做

矩阵)}}“方法=“POST”>
php laravel xampp laravel-artisan
1个回答
0
投票

改变

<form action="{{route('vehiculos.editar', $vehiculo->matricula)}}"

<form action="{{route('vehiculos.actualizar', $vehiculo->matricula)}}"

© www.soinside.com 2019 - 2024. All rights reserved.