为了账号安全,请及时绑定邮箱和手机立即绑定

以模型为参数的资源控制器方法不起作用

以模型为参数的资源控制器方法不起作用

PHP
森栏 2021-12-03 15:14:57
在基本的 Laracasts.com 教程(从头开始使用 Laracast 5.7)中,我尝试使用以下方法public function show(prototypes $prototypes)参数来构造视图。但是我的视图创建正确但$prototypes为空。这条路线运行良好(/prototypes/1/edit),我确保存在一个prototypeid 为 1的对象。我找到了一些旧的解决方案,它声明使用类似(integer $id)参数的东西,但这会导致更多的代码。它应该像这样工作:控制器:public function edit(prototypes $prototypes){    //    return view('prototypes.edit', compact('prototypes'));}根据Laracast From Scratch,这应该可行。你知道我怎么解决这个问题吗?该prototypes.edit方法知道如何使用正确的参数,这背后是什么机制?
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

为了使隐式模型绑定起作用,注入的变量名称应与路由参数名称匹配,在您的情况下,我认为您的参数名称可能是{prototype},您可以通过php artisan route:list在控制台中发出命令来验证它。


如果这是真的,您必须$prototype在控制器函数中将变量名称更改为(请注意单数)以匹配参数名称{prototype},如下所示:


public function edit(prototypes $prototype)

{

   return view('prototypes.edit', compact('prototype'));

}

更新:顺便说一句,关于模型名称的 laravel 约定是单数驼峰大小写,在您的情况下,您的模型应该命名为Prototypenot prototypes,即:


public function edit(Prototype $prototype)

{

   return view('prototypes.edit', compact('prototype'));

}


查看完整回答
反对 回复 2021-12-03
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

为了将Prototypes模型注入控制器变量$prototypes,Laravel 需要从路由到方法输入的匹配名称。所以在你的路由中,这个:

 /prototypes/1/edit

需要是

 /prototypes/{prototypes}/edit

为了使编辑方法注入原型模型的正确实例。


查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信