0

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

我有两个控制器,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@showshow($id),它工作正常,但我不能忽略相同的代码给我不同的结果,我希望我的代码尽可能干净。

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

我错过了什么吗?

谢谢!

4

1 回答 1

3

您将所需的模型注入到控制器操作中,而不是使用 ID 参数自己获取记录。因为您正在使用它,所以您需要遵守某些规则 -阅读路由模型绑定文档以获取更多信息。

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

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

要使用资源实现此目的,您需要手动命名资源参数,这实际上类似于您的模型名称Route::resource('two', 'TwoController')->parameters(['two' => 'myModel'])在哪里。myModel

于 2019-03-27T04:38:09.220 回答