Laravel中的构造函数依赖注入是如何工作的?

3

我正在使用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;
    }

请解释给我听。谢谢。

因为 __construct(Post $post , $post 是类型为 Post 的变量,所以创建一个 Post 对象并赋值给 $post - Kalhan.Toress
1
它将如何找到Post类并创建它的对象? - Jimit
1个回答

12

Laravel IoC使用一种称为自动装配的过程。这在其他语言和其他PHP IoC容器中非常常见。

这个想法是通过使用PHP的Reflection API来查看构造函数参数,Laravel可以看到$post需要一个Post实例,因此它会即时创建它。简而言之,Laravel将执行以下操作:

$post = new Post();
$user = new User();
$obj = new TheClass($post, $user);

(如果你想知道它如何找到 Post 类:Composer自动加载器将根据您在 composer.json 中的配置自动加载它。)

这个过程对于服务(即像数据库、日志记录器等“实用”类)很有效,但对于模型类则不起作用。

原因很简单:Laravel 不知道您要注入哪个帖子和用户(假设您的数据库中有多个帖子和用户)。相反,您应该从数据库中获取这些实例并自己传递它们。


感谢Matthieu的解释。 :) - Jimit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接