【问题标题】:Laravel Two Controller and One ModelLaravel 两个控制器和一个模型
【发布时间】:2019-03-27 01:37:08
【问题描述】:

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

我有两个控制器,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 中是否有任何规则规定您只能在资源上的每个模型使用一个控制器?

我错过了什么吗?

谢谢!

【问题讨论】:

  • 能否请您也出示您的路线文件?

标签: php model controller laravel-5.8


【解决方案1】:

您将所需的模型注入到控制器操作中,而不是使用 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 将是您的模型名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多