【问题标题】:Laravel 8 resource controller not fetching modelLaravel 8资源控制器未获取模型
【发布时间】:2021-02-06 16:40:42
【问题描述】:

在 Laravel 7 中获取模型非常简单,我只需要设置 mi 资源路由并获取地址:

http://localhost/test/public/employee/1

但我不能让它在 Laravel 8 上运行,根据我的理解我只需要这样做:

public function show(Employee $employee)
{
    dd($employee);
}

但是 dd 只返回一个空类:

如果我这样做:

public function show(Employee $employee)
{
    dd(Employee::find(1));
}

dd 返回正确的数据:

Route::resources([
    'employee' => EmployeeController::class,
]);

有人可以帮我找出我缺少的东西吗?

问候...

【问题讨论】:

  • 您能否将这条路线的定义添加到您的问题中。
  • 你能分享你的路线吗?
  • 添加你定义路由的代码。
  • 我的路由是资源路由 -> Route::resources(['employee' => EmployeeController::class,]);
  • php artisan route:list 的输出是什么? (你也可以做 php artisan route:list | grep employee)

标签: php laravel laravel-8


【解决方案1】:

您的路线必须具有相同的变量,如

Route::get('/employee/{employee}', 'EmployeeController@show');

并确保您为此路由启用了绑定中间件。 ->middleware(['bindings']);

更新资源路由:

Route::resource('/employee', 'EmployeeController')->middleware('bindings');

【讨论】:

  • 我的路由是资源路由 -> Route::resources(['employee' => EmployeeController::class,]);
  • resourceget 是不同的路由方法。
  • 绑定中间件适用于两种路由方法。 PHP artisan route:list 命令将显示您必须在控制器上设置的变量名称。
【解决方案2】:
Route::resource('employee', EmployeeController::class);

https://laravel.com/docs/8.x/controllers#resource-controllers

【讨论】:

    【解决方案3】:

    问题是我用西班牙语命名路线:

    Route::apiResource('empleados', EmployeeController::class);
    

    由于这个 Laravel 期望接收封装在西班牙语动词类中的模型(empleados 而不是雇员),所以我需要重命名方法控制器内的参数以接收正确的模型:

        public function show(Employee $empleado)
        {
            return $empleado;
        }
    

    【讨论】:

    • 我刚刚发现路由 URI ex。 /abcemployee/{abcemployee} 应该类似于资源控制器 ex。 public function show(ABCEmployee $abcemployee),在我的情况下,我尝试使用 php artisan make:model ABCEmployee -cmr 资源控制器的输出将是 public function show(ABCEmployee $aBCEmployee) 不起作用,我的解决方案是更改 $ aBCEmployee 到 $abcemployee
    猜你喜欢
    • 2021-11-16
    • 2018-01-16
    • 1970-01-01
    • 2021-11-10
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多