【问题标题】:The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE. in Laravel 8此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。在 Laravel 8
【发布时间】:2021-09-09 08:13:35
【问题描述】:

我在尝试从表单中注册某些内容时收到此错误。我将发布代码,然后解释情况

查看代码

@extends('layouts.app')

@section('content')
<div class="container">

    <h1>Crear Especialidad</h1>
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Register') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('especialidades.create') }}">
                        @csrf
                        <div class="form-group row">
                            <label for="nombre" class="col-md-4 col-form-label text-md-right">{{ __('Nombre') }}</label>
                            
                            <div class="col-md-6">
                                <input id="nombre" type="text" class="form-control @error('nombre') is-invalid @enderror" name="nombre" value="{{ old('nombre') }}" required autocomplete="nombre" autofocus>

                                @error('nombre')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                        
                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Registrar') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

控制器代码

 public function create(array $data)
    {
        return Especialidades::create($data);  
    }

路线

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

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/nuevaEspecialidad', [EspecialidadesController::class,'nuevo'])->name('nuevaEspecialidad');
Route::resource('/especialidades', EspecialidadesController::class);
Route::get('/gestionarMedicos', [PersonaController::class,'mostrarMedicos'])->name('personaMostrarMedicos');

不知道是否是覆盖问题或类似问题,但资源路由应该支持创建功能的发布。我正在尝试将表单中的数据插入到数据库中,您可以在视图中看到一个名称。
我是 Laravel 的新手,所以不知道可能是什么原因。如果需要,我很乐意为您提供额外的代码,或者如果解释不充分,我会更好地解释情况。

【问题讨论】:

  • 应该是{{ route('especialidades.store') }}

标签: php laravel laravel-8


【解决方案1】:

在你的情况下,应该是{{ route('especialidades.store') }}

原因是在资源控制器的 db 中创建行的默认方法是 App\Http\Controllers@store

/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

这里的create方法只是为了展示store方法的形式,而不是存储数据本身的功能。

【解决方案2】:

您正在使用resource,其中especialidades.create 将接受get 方法。你的提交方法是post,所以你需要改变:

{{ route('especialidades.store') }}

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2021-02-01
    • 2020-01-23
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多