繁体   English   中英

laravel资源控制器/路线和模型

[英]laravel resource controllers / routes and models

所以如果你做类似的事情

$ artisan make:model TurboClown
$ artisan make:controller TurboClownController -r --model=TurboClown

因此,此时可以添加如下内容:

Route::resource('clowns','TurboClownController');

到您的routes/web.php 现在,当我与工匠一起进行routes:list时,我有诸如clowns/{clown} routes:list

但是,我的show函数就像:

    public function show(TurboClown $turboClown)

当您return $turboClown时,例如,当您请求“ / clowns / 3 /”时,将仅给出[]作为响应。 我花了一段时间才弄清楚,如果我将$turboClown参数更改$turboClown $clown ,则会得到一个JSON TurboClown作为响应。

所以从某种意义上说,我解决了我的问题。 但我对以下几点感到好奇:

  1. 对我来说, https: ['parameters' => ['clown' => 'turboClown']读起来就像我可以添加['parameters' => ['clown' => 'turboClown']然后show()可以使用“ turboClown”工作,但不能。

  2. 根据https://laravel.com/docs/5.4/routing#route-parameters :“路由参数根据其顺序注入到路由回调/控制器中-回调/控制器参数的名称无关紧要。” 但是看起来参数的名称在这种情况下重要吗?

因此,我想对这两点进行某种澄清,我缺少什么?

  1. 你做错了。 该文件说:

参数数组应该是资源名称和参数名称的关联数组

因此,在您的情况下,资源名称为“小丑”(而不是“小丑”),并且您希望此资源名称的参数为“ turboClown”:

Route::resource('clowns', 'TurboClownController', ['parameters' => [
    'clowns' => 'turboClown'
]]);
  1. 我同意这一点可能会造成混淆。 也许您已经知道,但是您在这里所做的称为隐式路由模型绑定 为了使它“隐含”,有一条规则可以否决您提到的一条规则:

Laravel自动解析在路由或控制器操作中定义的口才模型,这些操作的类型提示变量名称与路由段名称匹配。

同样, TurboClown此功能很酷,参数必须匹配相应模型的标识符(在您的情况下为TurboClown )。

因此,现在结合这两点,您应该能够做到这一点:

在您的路线文件中:

Route::resource('clowns', 'TurboClownController', ['parameters' => [
    'clowns' => 'turboClown'
]]);

TurboClownController

public function show(TurboClown $turboClown)
{
    return $turboClown;
}

现在,假设您要检索标识为5的涡轮小丑。您可以计算路线http://example.dev/clowns/5

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM