Jim*_*mit 2 php dependency-injection laravel
我正在使用Laravel.我知道我们可以编写构造函数依赖注入,如下面的代码.我想知道它是如何工作的?我的意思是构造函数如何获得$ post和$ user模型对象?怎么注射?
/**
* Inject the models.
* @param Post $post
* @param User $user
*/
public function __construct(Post $post, User $user)
{
parent::__construct();
$this->post = $post;
$this->user = $user;
}
Run Code Online (Sandbox Code Playgroud)
请解释一下.谢谢.
Laravel IoC使用称为自动装配的过程.这在其他语言和其他PHP IoC容器中非常常见.
我们的想法是使用PHP的Reflection API查看构造函数参数.使用它,Laravel可以看到它$post需要是一个Post实例,因此它将动态创建它.简而言之,Laravel会做这样的事情:
$post = new Post();
$user = new User();
$obj = new TheClass($post, $user);
Run Code Online (Sandbox Code Playgroud)
(如果您想知道它将如何找到Post该类:Composer自动加载器将根据您的配置自动加载它composer.json)
此过程适用于Services(即"实用程序"类,如数据库,记录器等),但它不适用于Model类.
原因很简单:Laravel无法知道您要注入哪个帖子和用户(假设您的数据库中有几个).相反,您应该从数据库中获取这些实例并将它们传递给您自己.