首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在laravel控制器的构造器或laravel控制器的具体函数中注入模型

在laravel控制器的构造器或laravel控制器的具体函数中注入模型
EN

Stack Overflow用户
提问于 2018-12-19 13:24:55
回答 1查看 1.5K关注 0票数 0

想象一下,在大构造函数(PostController)中,我需要注入3种模型:用户、帖子和评论。

我有两种情况:

1)将这3种模型都注入控制器构造函数中,然后在具体函数中使用此控制器变量,如:$this->post

2)将这些模型注入到具体控制器的功能中,无论何时何地(如index(Post $post));

这两种方法中哪一种更好?在第一个场景中,在索引函数中,我只使用$this->post变量,但是我也创建了$this->comment$this->user,因为在其他函数中需要它们?但是我不需要它们在索引中,所以每当我通过寻址索引特定的路由调用索引时,我都会注入并免费创建它们。不是很糟吗?那其中哪一个更好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-19 13:38:31

通常,当您将模型注入到控制器方法中时,这意味着您试图将路由值绑定到模型。简单地说,你想让laravel自动神奇地为你取那个型号。

另一方面,当您通过__construct()注入它时,您希望这些模型被实例化,以便在类中使用。简单地说,您希望Laravel在类中创建该模型的一个新实例。

让我们实际一点:

First situation

代码语言:javascript
复制
//routes

Route::get('/ninjas/{ninja}') //ninja is a number or anything that identifies a model

//Controller

public function index(Ninja $ninja)
{        
    //$ninja will be a resolved model
}

其他情况,

代码语言:javascript
复制
public function __construct(Ninja $ninja)
{        
    $this->ninja = $ninja;
}

public function index($ninja_id)
{        
    $this->ninja->find($ninja_id)
}

正如您从上面的例子中所看到的,它取决于用例。也就是说,如果您打算将模型绑定到路由,那么,如果您想以更干净的方式使用模型,则向控制器方法注入,直到构造函数。

干杯!

PS:边注,要求最佳实践通常会吸引固执己见的答案,这将使找到一个正确的答案很难。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53852196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档