Laravel控制器不能注入类型提示模型.

问题描述 投票:0回答:1

它看起来非常简单,但我不能解决这个奇怪的问题超过3小时...;。

我只是创建我的控制器方法像

// AccountTeacherPassportController.php
public function delete(Teacher $teacher)
{
    // do things
}

使用这种方法,我写了路由... ...

Route::post('deltp/{teacher}', 'AccountTeacherPassportController@delete')->name('delTeacherPassport');

这是超级简单的情况下,我得到这个错误。

传递给App\Http\Controllers\Administrators\AccountTeacherPassportController::delete()的参数1必须是App\Gatesplan\Teacher/Teacher的实例,字符串给定。

有这种经历的人,帮我一下... ...


解决了。以下是我的问题报告。

来源: 如果路由定义在路由组中, Laravel的路由模型绑定不工作.

你可能需要的东西

  1. 在路由参数中注入模型,不能从url中选择。{wildcard}s.
  2. 你必须 "按顺序 "提供通配符对象。
  3. 你不需要使用所有的通配符,只要你以下2个。

我的问题是,入口点的url使用两个通配符,而不是一个通配符。{user}, {teacher} 但我的控制器方法只接受一个参数。public function delete(Teacher $teacher) 这是不有序的。所以我修改了如下方法 public function delete($user, Teacher $teacher) 并有效。很明显,`public function delete(User $user, Teacher $teacher)也能用。

laravel controller
1个回答
1
投票

根据 文件 在您使用 explicit binding

要注册一个显式绑定,使用路由器的model方法来指定给定参数的类。你应该在路由器的引导方法中定义你的显式模型绑定。RouteServiceProvider 类。

public function boot()
{
    parent::boot();

    Route::model('teacher', App\Gatesplan\Teacher\Teacher::class);
}

接下来,定义一个包含{教师}参数的路由(你已经做了)。

Route::post('deltp/{teacher}', 'AccountTeacherPassportController@delete')->name('delTeacherPassport');
© www.soinside.com 2019 - 2024. All rights reserved.