缺少[路线:employees.update] laravel的必需参数

时间:2020-09-27 10:35:17

标签: php laravel

我在laravel中创建对象。我遇到了[路由:employees.update] [URI:employees / {employee}]缺少必需参数的问题。 (查看:C:\ xampp \ htdocs \ jbs \ resources \ views \ employees \ edit.blade.php)到目前为止我尝试过的内容如下。我在下面添加了模型视图控制器

编辑刀片页面

  @extends('employees.layout')       
    @section('content')
        <div class="row">
            <div class="col-lg-12 margin-tb">
                <div class="pull-left">
                    <h2>Edit Employee</h2>
                </div>
                <div class="pull-right">
                    <a class="btn btn-primary" href="{{ route('employees.index') }}"> Back</a>
                </div>
            </div>
        </div>
       
        @if ($errors->any())
            <div class="alert alert-danger">
                <strong>Whoops!</strong> There were some problems with your input.<br><br>
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
      
        <form action="{{ route('employees.update',$employees->id) }}" method="POST">
            @csrf
            @method('PUT')
       
             <div class="row">
    
                <div class="col-xs-12 col-sm-12 col-md-12">
                    <div class="form-group">
                        <strong>StudentName:</strong>
                        <input type="text" name="name" value="{{ $employees->studname }}" class="form-control" placeholder="Name">
                    </div>
                </div>
                  <div class="col-xs-12 col-sm-12 col-md-12">
                                <div class="form-group">
                                    <strong>Course</strong>
                                    <input type="text" name="name" value="{{ $employees->course }}" class="form-control" placeholder="course">
                                </div>
                            </div>
                 <div class="col-xs-12 col-sm-12 col-md-12">
                                            <div class="form-group">
                                                <strong>Fee</strong>
                                                <input type="text" name="name" value="{{ $employees->fee }}" class="form-control" placeholder="fee">
                                            </div>
                                        </div>

                <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                  <button type="submit" class="btn btn-primary">Submit</button>
                </div>
            </div>
       
        </form>
    @endsection

控制器

 public function edit(Employee $employees)
    {
        return view('employees.edit',compact('employees'));
    }



    public function update(Request $request, Employee $employees)
    {
        $request->validate([
            'studname' => 'required',
            'course' => 'required',
            'fee' => 'required',
        ]);

        $employees->update($request->all());

        return redirect()->route('employees.index')
            ->with('success','Employee updated successfully');
    }

模型

    protected $fillable = [
        'studname', 'course','fee',
    ];
}

enter image description here

路线

Route::resource('employees','App\Http\Controllers\EmployeeController');

3 个答案:

答案 0 :(得分:0)

您的路线参数是employee而不是employees。默认情况下,资源路由的路由参数名称为单数。路线实际上是这样的:

employees/{employee}

因此,在您的Controller的edit方法中,您使用了错误的参数名称,因此您将获得Employee的新实例,而不是将基于route参数注入实例的隐式路由模型绑定,需要将带有类型提示的参数名称与路由参数名称匹配:

//                            {employee}
public function edit(Employee $employee)
{
    ...
    return view(...., ['employee' => $employee]);
}

现在,在视图中,您将拥有实际的现有Employee实例,可用于生成路由的URL,而不是没有返回id的{​​{1}}的空Employee:

null

路由系统可以从模型实例中获取正确的密钥。

答案 1 :(得分:-1)

您应该传递$ employees-> id作为隐藏的输入字段。

将您的路线设为

 Route::post('employee/update', 'YourController@yourFunction');

,在编辑页面中,表单操作应类似于

<form action="{{ route('employees.update'}}" method="POST">

为传递ID设置隐藏的输入字段

<input type="hidden" name="id" value="{{$employees->id}}"></input>

答案 2 :(得分:-1)

您应该像这样将路由名称传递给路由功能

route('route name',parameter1)

示例:

Route::post('employee/update/{id}' ,YourController@update)->name('update_employee');

    <form action="{{ route('update_employee',$employees->id) }}" method="POST">
        @csrf
...