我只是在玩我的代码,并且注意到我的一个控制器返回空属性,而另一个则返回我的数据。
我有两个控制器,OneController和TwoController,其中都具有资源和相同的模型。我使用php artisan make:controller OneController --model==MyModel
和php 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)
,它可以正常工作,但是我不能忽略相同的代码给我不同的结果,并且我希望我的代码尽可能整洁。 / p>
Laravel 5.8中是否有任何规则,每个模型只能在一个资源上使用一个控制器?
我想念什么吗?
谢谢!
答案 0 :(得分:2)
您要将所需的模型注入到控制器操作中,而不是使用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
是您的模型名称。