【问题标题】:Missing required parameters for [Route: employees.update] laravel[Route: employees.update] laravel 缺少必需的参数
【发布时间】:2023-03-19 19:43:02
【问题描述】:

我在 laravel 中创建 crud。我遇到了缺少 [Route: 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',
    ];
}

路线

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

【问题讨论】:

  • 您是在提交后还是在加载页面时收到错误消息?如果您仍然可以加载页面,您可以尝试检查 action 属性。顺便说一句,路由助手的第二个参数必须是一个数组,所以你应该这样写route('employees.update', [$employees-&gt;id])
  • 我的问题仍然没有解决我尝试了 2 天仍然是同样的问题我尝试了所有方法

标签: php laravel


【解决方案1】:

您的路由参数是employee 而不是employees。资源路由的路由参数名称默认为singular。路线其实是这样的:

employees/{employee}

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

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

现在,在视图中,您将拥有实际现有的 Employee 实例,您可以使用该实例生成路由的 URL,而不是没有返回 id 的空 Employee 实例null

{{ route('employees.update', ['employee' => $employee->id]) }}
// or
{{ route('employees.update', ['employee' => $employee]) }}

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

【讨论】:

  • 我的问题仍然没有解决我尝试了 2 天仍然是同样的问题我尝试了所有方法
  • @tutusfun 你做了这些改变吗?
  • 是的,还是有问题。我可以把项目发给你吗?请帮忙
【解决方案2】:

您应该将 $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>

【讨论】:

  • Route::post('employee/update', 'App\Http\Controllers\EmployeeController');如果我写我在路线上遇到错误我已经添加了 Route::resource('employees','App\Http\Controllers\EmployeeController');
  • 那么不要创建路由,如果你添加了一个隐藏的输入来传递id,那么你不需要在表单的更新操作中传递$employees->id参数。
  • 语法错误,意外 ';',期待 ')' (查看:C:\xampp\htdocs\jbs\resources\views\employees\edit.blade.php)错误显示我更改了
    输入> 就像我在上面解释的那样\
  • 缺少一个括号,请在实际操作中使用这些。 {{ route('employees.update')}}
  • 输入不是路由参数
【解决方案3】:

你应该像这样将路由名称传递给路由函数

route('route name',parameter1)

例子:

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

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

【讨论】:

  • UnexpectedValueException 无效的路由操作:[App\Http\Controllers\EmployeeController]。错误
  • 将 YourController 更改为 EmployeeController
  • 并使您的更新功能像这个公共功能 update(Request $request, $id) { ....
  • 我看到你设置了 meethod post 并覆盖它以使用 @
    @csrf @method('PUT') 删除放置
  • 缺少 [Route: employees.update] [URI: employees/{employee}] 所需的参数。 (查看
猜你喜欢
  • 2021-11-15
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
相关资源
最近更新 更多