Laravel两个控制器和一个模型

时间:2019-03-27 01:37:09

标签: php model controller laravel-5.8

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

我有两个控制器,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),它可以正常工作,但是我不能忽略相同的代码给我不同的结果,并且我希望我的代码尽可能整洁。 / p>

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

我想念什么吗?

谢谢!

1 个答案:

答案 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是您的模型名称。