【问题标题】:Laravel Controller Type HintingLaravel 控制器类型提示
【发布时间】:2019-01-15 19:39:47
【问题描述】:

使用 -mcr (php artisan make:model 机构 -mrc) 创建模型后,控制器中的 show 函数脚手架为:

 /**
 * Display the specified resource.
 *
 * @param  \App\Organization\Institution  $institution
 * @return \Illuminate\Http\Response
 */
public function show(Institution $institution)
{
    return view('institutions.show', ['institution' => $institution]);
}

返回视图...是我插入的。我期待它填充其 id 在参数中发送的对象。

/institutions/1

但是,在使用 dd($institution) 之后,我验证它有 ID,而不是对象。

这个变量不应该把对象返回给我吗?

【问题讨论】:

  • 你能把你的dd输出放在这里吗?
  • 你的表演路线是如何定义的?

标签: php laravel laravel-5.6 type-hinting


【解决方案1】:

这称为Route Model Binding。您的路线需要如下所示:

Route::get('institutions/{institution}', 'InstitutionController@show');

然后根据你的控制器

public function show(Institution $institution) 
{
    return view('institutions.show', compact($institution))
}

您可以在here 上阅读更多内容。

我想你的路线有一个名为 {id} 而不是 {institution} 的参数。

【讨论】:

  • 路由参数的名称和传递给控制器​​方法的参数名称必须相同才能正常工作。
【解决方案2】:

替换显示函数的参数

public function show(Institution $institution) 
{
    return view('institutions.show', compact($institution))
}

变成

public function show($id) 
{
    $institution = App\Institution::findOrFail($id);;
    return view('institutions.show', compact('institution'));
}

在你的路线中 Route::get('institutions/{id}', 'InstitutionController@show');

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 2018-07-27
    • 2015-06-30
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2017-07-29
    • 2021-10-24
    • 2018-07-15
    相关资源
    最近更新 更多