首页 > 解决方案 > 无法将 $id 参数发送到控制器功能 Laravel 8

问题描述

我正在尝试在我的控制器中使用自定义函数在我的数据库中执行软删除,但我收到以下错误。

函数 App\Http\Controllers\EspecialidadesController::borrarEspecialidad() 的参数太少,在第 54 行的 D:\xampp\htdocs\SistemaHNF\vendor\laravel\framework\src\Illuminate\Routing\Controller.php 中传递了 0预计 1 个

看起来$id没有达到控制器功能。我将发布控制器、视图和路由的代码。

看法

@extends('layouts.app')

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

    <h1>Editar 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.borrarEspecialidad', $especialidad) }}">
                        @csrf
                        @method('PUT')
                        <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"  readonly class="form-control-plaintext" class="form-control @error('nombre') is-invalid @enderror" name="nombre" value="{{ $especialidad->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-danger">
                                    {{ __('Borrar') }}
                                </button>
                                <a class=" button btn btn-primary"href="{{route('especialidades.index')}}">Cancelar</a>        
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

控制器

public function borrarEspecialidad($id)
{
    var_dump($id);
    $especialidad = Especialidades::findOrFail($id);
    $especialidad->estado = false;

    if ($especialidad->save()) {
        return redirect()->route('especialidades.index');
    } else {
        return redirect()->route('especialidades.borrar');
    }
}

路线

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

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/especialidades/borrar/{nombre}',[EspecialidadesController::class,'borrar'])->name('especialidades.borrar');
Route::put('/especialidades/delete',[EspecialidadesController::class,'borrarEspecialidad'])->name('especialidades.borrarEspecialidad');
Route::resource('/especialidades', EspecialidadesController::class);
Route::get('/gestionarMedicos', [PersonaController::class,'mostrarMedicos'])->name('personaMostrarMedicos');
Route::get('editarMedico',[PersonaController::class])->name('editarMedicos');

我是 Laravel 的新手,而且英语不是我的主要语言,而且我还没有在互联网上找到我的问题的答案。

标签: phplaravellaravel-8

解决方案


对于路线试试这个

Route::post('/especialidades/delete',[EspecialidadesController::class,'borrarEspecialidad'])->name('especialidades.borrarEspecialidad');

在你的刀片

<form method="POST" action="{{ route('especialidades.borrarEspecialidad') }}">
   @csrf
   <input name="id" value="{{$yourModel->id ?? 0}}" hidden>
</form>

控制器

public function borrarEspecialidad(Request $request)
{
   $id = $request['id'];
   $especialidad = Especialidades::findOrFail($id);
   $especialidad->estado = false;

   if ($especialidad->save()) {
       return redirect()->route('especialidades.index');
   } else {
       return redirect()->route('especialidades.borrar');
   }
}

推荐阅读