想象一下,在大构造函数(PostController)中,我需要注入3种模型:用户、帖子和评论。
我有两种情况:
1)将这3种模型都注入控制器构造函数中,然后在具体函数中使用此控制器变量,如:$this->post
2)将这些模型注入到具体控制器的功能中,无论何时何地(如index(Post $post));
这两种方法中哪一种更好?在第一个场景中,在索引函数中,我只使用$this->post变量,但是我也创建了$this->comment和$this->user,因为在其他函数中需要它们?但是我不需要它们在索引中,所以每当我通过寻址索引特定的路由调用索引时,我都会注入并免费创建它们。不是很糟吗?那其中哪一个更好?
发布于 2018-12-19 13:38:31
通常,当您将模型注入到控制器方法中时,这意味着您试图将路由值绑定到模型。简单地说,你想让laravel自动神奇地为你取那个型号。
另一方面,当您通过__construct()注入它时,您希望这些模型被实例化,以便在类中使用。简单地说,您希望Laravel在类中创建该模型的一个新实例。
让我们实际一点:
First situation
//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
}其他情况,
public function __construct(Ninja $ninja)
{
$this->ninja = $ninja;
}
public function index($ninja_id)
{
$this->ninja->find($ninja_id)
}正如您从上面的例子中所看到的,它取决于用例。也就是说,如果您打算将模型绑定到路由,那么,如果您想以更干净的方式使用模型,则向控制器方法注入,直到构造函数。
干杯!
PS:边注,要求最佳实践通常会吸引固执己见的答案,这将使找到一个正确的答案很难。
https://stackoverflow.com/questions/53852196
复制相似问题