Laravel 两个控制器和一个模型

Laravel Two Controller and One Model

我只是在玩我的代码,注意到我的一个控制器返回空属性,而另一个控制器返回我的数据正常。

我有两个控制器,OneController 和 TwoController,其中包含资源和相同的模型。我使用 php artisan make:controller OneController --model==MyModelphp artisan make:controller TwoController --model==MyModel。两个具有相似型号的不同控制器。

两者都有

public function show(MyModel $myModel)
{
    dd($myModel);
}

但只有 OneController@show 正在返回我的数据...

我的链接是这样的

{{route('one.show', $myModel->id) }}

{{route('two.show', $myModel->id) }}

我也运行php artisan route:clear

我将我的 TwoController@show 更改为 show($id),它工作正常,但我不能忽视相同的代码会给我不同的结果,我希望我的代码尽可能干净.

Laravel 5.8 中是否有规定您只能在一个资源上的每个模型使用一个控制器?

我是不是漏掉了什么?

谢谢!

您正在将所需的模型注入控制器操作,而不是使用 ID 参数自行获取记录。因为您正在使用它,所以您需要遵守某些规则 - read the route model binding documentation 了解更多信息。

长话短说:路由定义中的参数名称和控制器操作中的参数名称需要匹配才能进行路由模型绑定 - 否则将传递一个新的模型实例方法。

因为你使用的是Route::resource()方法而不是自己定义路由Laravel会自动按照你传入的路径调用参数,你可以通过运行验证php artisan route:list.

要使用资源实现此目的,您需要 manually name the resource parameters,这实际上类似于 Route::resource('two', 'TwoController')->parameters(['two' => 'myModel']),其中 myModel 是您的模型名称。