就像基本的Laracasts.com教程(从头开始的Laracast 5.7)一样,我试图使用以下方法public function show(prototypes $prototypes)
参数来构建视图。但是我的视图创建正确,但是$prototypes
为空。
该路由运作良好(/prototypes/1/edit
),并且确保存在ID为1的prototype
对象。
我找到了一些较旧的解决方案,该解决方案规定使用(integer $id)
之类的参数作为参数,但这会导致更多代码。它应该像这样工作:
控制器:
public function edit(prototypes $prototypes)
{
//
return view('prototypes.edit', compact('prototypes'));
}
根据从头开始播放,这应该可以。
您知道我该如何解决吗?
prototypes.edit
方法知道如何使用正确的参数的背后机制是什么?
答案 0 :(得分:1)
为使Implicit Model Binding起作用,注入的变量名称应与 route参数名称匹配,在您的情况下,我认为您的参数名称可以为{{ 1}},您可以通过在控制台中发出命令{prototype}
进行验证。
如果是这样,则必须在控制器函数中将变量名称更改为php artisan route:list
(请注意单数形式)以匹配参数名称$prototype
,如下所示:
{prototype}
更新:顺带一提,关于Model名称的laravel约定是单数驼峰式,在您的情况下,您的Model应该命名为public function edit(prototypes $prototype)
{
return view('prototypes.edit', compact('prototype'));
}
而不是Prototype
,即:
prototypes
答案 1 :(得分:0)
为了将 Prototypes 模型注入控制器变量$prototypes
,Laravel希望从路由到方法输入的名称都匹配。因此,在您的路由中,这是
/prototypes/1/edit
需要成为
/prototypes/{prototypes}/edit
为了使edit方法能够注入原型模型的正确实例。