在laravel控制器构造函数中注入模型

时间:2018-03-14 08:31:01

标签: php laravel design-patterns coding-style

我想知道以这种方式在控制器中使用我的模型类是否是一个好习惯:

public function __construct(Rule $rules)
{
    $this->rules = $rules;
}

我不想在我的控制器中重复自己,所以我想知道什么是最好的方法

2 个答案:

答案 0 :(得分:2)

您使用依赖注入 - 这是非常好的做法。

根据文件: 依赖注入是一个奇特的短语,本质上意味着:类依赖性通过构造函数“注入”类,或者在某些情况下,“注入”方法。

month = []
count = []
array_of_hash.each do |hash|
   month << hash['month']
   count << hash['count']
end

在此示例中,UserController需要从数据源检索用户。因此,我们将注入一个能够检索用户的服务。在此上下文中,我们的UserRepository最有可能使用Eloquent从数据库中检索用户信息。但是,由于注入了存储库,我们可以轻松地将其与另一个实现交换出来。我们还可以在测试应用程序时轻松“模拟”或创建UserRepository的虚拟实现。

另请阅读Service Container - 它是强大的工具: https://laravel.com/docs/5.6/container

答案 1 :(得分:0)

在控制器中注入模型是一种很好的做法,但推荐的方法是:

  • 在控制器文件的顶部有一个use语句
  • 在需要访问模型的功能中实现它,我不建议您在控制器中执行它
  • 如果您查看文档,您将能够将模型直接绑定到您的路线并消除一些Model :: find(id)https://laravel.com/docs/5.6/routing#route-model-binding
  • 的麻烦

建议您使用其他类(如存储库,单例或您希望注入的任何功能)时使用的构造函数方法,请参阅文档以获取更多信息:https://laravel.com/docs/5.6/container

希望这有帮助